Я новичок в 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, который, по моему мнению, очень продуманный.