Сличитель. Как получить индекс найденной группы?

1

У меня есть предложение, и я хочу рассчитать слова, semiPunctuation и endPunctuation в нем.

Команда "m.group()" покажет результат строки. Но как узнать, какая группа найдена? Я могу использовать метод с "group null", но это звучит не очень хорошо.

String input = "Some text! Some example text."
int wordCount=0;
int semiPunctuation=0;
int endPunctuation=0;

Pattern pattern = Pattern.compile( "([\\w]+) | ([,;:\\-\"\']) | ([!\\?\\.]+)" );
Matcher m = pattern.matcher(input);
while (m.find()) {

//  need more correct method
if(m.group(1)!=null) wordCount++;
if(m.group(2)!=null) semiPunctuation++;
if(m.group(3)!=null) endPunctuation++;

}
  • 0
    Почему бы не иметь три спички и три петли?
  • 0
    Вы можете использовать отдельные шаблоны и проблема решена. :)
Показать ещё 1 комментарий
Теги:
matcher

1 ответ

1

Вы можете использовать именованные группы для захвата выражений

Pattern pattern = Pattern.compile( "(?<words>\\w+)|(?<semi>[,;:\\-\"'])|(?<end>[!?.])" );
Matcher m = pattern.matcher(input);
while (m.find()) {
    if (m.group("words") != null) {
        wordCount++;
    } 
  ...
}
  • 0
    В начале "ArrayList <String> res = new ArrayList <String> ();" и в цикле что-то вроде этого: "res.add (m.group ());" И этот ArrayList отсортирован. Вот почему я не могу использовать 3 отдельных цикла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню