matcher.find () регулярное выражение Java функция - PullRequest
0 голосов
/ 05 августа 2020

рассмотрите приведенный ниже код, который проверяет, находится ли ввод в форме: <tag>contents</tag> Если ввод в форме выше, напечатайте содержимое между тегами, иначе напечатайте None.

например:

  1. ввод: <h1>Nayeem loves counseling</h1> вывод: Найим любит консультировать

  2. ввод: <h1><h1>Sanjay has no watch</h1></h1><par>So wait for a while</par> вывод: у Санджая нет часов Так что подождите немного

  3. ввод: <Amee>safat codes like a ninja</amee> вывод: Нет

String line = scan.nextLine();

boolean matchFound = false;
Pattern r = Pattern.compile("<(.+)>([^<]+)</\\1>");
Matcher m = r.matcher(line);

while(m.find()) {
    System.out.println(m.group(2));
    matchFound = true;
}

if(!matchFound) {
    System.out.println("None");
}

Здесь find () возвращает логический тип. У меня вопрос: почему find () следует использовать с while l oop? Почему я не могу использовать if вместо while? Как find работает внутри компании?

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Когда вы вызываете find(), сопоставитель попытается найти следующую последовательность, которая соответствует вашему шаблону регулярного выражения. Используя find() через некоторое время l oop, вы сможете получить все совпадающие последовательности, если они есть. Если вы хотите сопоставить входную строку в целом, вы можете использовать matches().

Ссылка:

метод поиска в Java Docs

соответствует методу в Java Документах

0 голосов
/ 05 августа 2020

Ответ находится в javado c для find.

public boolean find()

Попытки найти следующую подпоследовательность ввода последовательность, которая соответствует шаблону.

Этот метод запускается в начале области этого сопоставителя, или , если предыдущий вызов метода был успешным и сопоставитель с тех пор не сбрасывался, с первого символа не соответствует предыдущему совпадению .

Если совпадение прошло успешно, дополнительную информацию можно получить с помощью методов start, end и group.

Код, который вы ищете at is неоднократно находит следующее совпадение для регулярного выражения и выводит соответствующую вторую группу. Так как вторая группа совпадений - это содержимое тегов, будет напечатано содержимое всех тегов.

Если вы использовали if вместо while, будет напечатано только первое совпадение; т.е. только содержимое первого тега.

...