Я новичок в Java. Как разработчик .Net, я очень привык к классу Regex
в .Net. Реализация Java Regex
(Regular Expressions) не плоха, но в ней отсутствуют некоторые ключевые функции.
Я хотел создать свой собственный вспомогательный класс для Java, но я подумал, что, возможно, уже есть один доступный. Итак, есть ли бесплатный и простой в использовании продукт для Regex на Java или я должен сам его создать?
Если бы я написал свой собственный класс, как вы думаете, я должен поделиться им с другими, чтобы использовать его?
[изменить]
Были жалобы на то, что я не рассматривал проблему с текущим классом Regex
. Я попытаюсь уточнить свой вопрос.
В .Net использование регулярного выражения проще, чем в Java. Поскольку оба языка объектно ориентированы и очень похожи во многих аспектах, я ожидаю, что у вас будет аналогичный опыт использования regex на обоих языках. К сожалению, это не так.
Здесь немного кода, сравниваемого в Java и С#. Первый - это С#, а второй - Java:
В С#:
string source = "The colour of my bag matches the color of my shirt!";
string pattern = "colou?r";
foreach(Match match in Regex.Matches(source, pattern))
{
Console.WriteLine(match.Value);
}
В Java:
String source = "The colour of my bag matches the color of my shirt!";
String pattern = "colou?r";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(source);
while(m.find())
{
System.out.println(source.substring(m.start(), m.end()));
}
Я попытался быть справедливым для обоих языков в приведенном выше примере кода.
Первое, что вы заметили здесь, - это член .Value
класса Match
(по сравнению с использованием .start()
и .end()
в Java).
Зачем мне создавать два объекта, когда я могу вызвать статическую функцию типа Regex.Matches
или Regex.Match
и т.д.?
В более продвинутом использовании разница проявляется гораздо больше. Посмотрите на метод Groups
, длину словаря, Capture
, Index
, Length
, Success
и т.д. Это все очень необходимые функции, которые, на мой взгляд, также должны быть доступны для Java.
Конечно, все эти функции могут быть добавлены вручную с помощью специального класса прокси (помощника). Это основная причина, по которой я задал этот вопрос. У нас нет дуновения Regex
в Perl, но по крайней мере мы можем использовать подход .Net к Regex
, который, по моему мнению, очень продуманный.