Поэтому я пытаюсь подсчитать количество скобок (например, закрывающих скобок) в строке с помощью регулярного выражения. Я нашел этот метод "groupCount" в классе соответствия. Поэтому я подумал, что это может мне помочь.
groupCount говорит в JavaDoc: «Любое неотрицательное целое число, меньшее или равное значению, возвращенному этим методом, гарантированно будет действительным индексом группы для этого сопоставителя». Так что я представляю, что утверждение
m.group(m.groupCount());
всегда должно работать. Неправильно ...
Вот некоторый тестовый код, который я написал:
public class TestJavaBracketPattern {
public static void main(String[] args) {
Matcher m = Pattern.compile("(\\))").matcher(")");
System.out.println(m.group(m.groupCount()));
}
}
Теперь я ожидаю сопоставить закрывающую скобку (называемую \) в регулярном выражении) и получить одно совпадение. Регулярное выражение (\)) - оно должно соответствовать группе, содержащей символ закрытой скобки. Но он просто выдает какое-то исключение (java.lang.IllegalStateException: совпадений не найдено).
Затем я попытался найти совпадение там, где нет совпадения:
public class TestJavaBracketPattern {
public static void main(String[] args) {
Matcher m = Pattern.compile("(\\))").matcher("(");
System.out.println(m.group(m.groupCount()));
}
}
Я получаю то же исключение. Фактически, в обоих случаях я обнаружил, что метод groupCount возвращает 1.
Очень растерян.