Согласно Javadoc, (насколько я понимаю), matches() будет выполнять поиск по всей строке, даже если найдет то, что ищет, и find() остановится, когда найдет то, что ищет.
Если это предположение верно, я не могу видеть, когда вы захотите использовать matches() вместо find(), если только вы не хотите подсчитать количество найденных совпадений.
На мой взгляд, тогда класс String должен иметь find() вместо matches() встроенного метода.
Итак, подведем итог:
Верно ли мое предположение?
Когда полезно использовать matches() вместо find()?
Переведено автоматически
Ответ 1
matches пытается сопоставить выражение со всей строкой и неявно добавляет ^ в начале и $ в конце вашего шаблона, что означает, что он не будет искать подстроку. Отсюда вывод этого кода:
p = Pattern.compile("^\\d\\d\\d$"); m = p.matcher("123"); System.out.println(m.find()); System.out.println(m.matches()); }
/* output: true false true true */
123 является подстрокой a123b поэтому find() метод выдает true . matches() только "видит", a123b что не совпадает с 123 и, следовательно, выдает false .
Ответ 2
matches возвращает true, если вся строка соответствует заданному шаблону. find пытается найти подстроку, соответствующую шаблону.
Ответ 3
matches() - возвращает только true, если совпадает полная строка
find() - попытается найти следующее вхождение в подстроке, которая соответствует регулярному выражению.
Обратите внимание на ударение на " следующем" в случае find(). Это означает, что результат многократного вызова find() может быть разным. Кроме того, с помощью find() вы можете вызвать start(), чтобы вернуть позицию, с которой была сопоставлена подстрока.
Итак, будьте осторожны при вызове find() несколько раз, если Matcher объект не был сброшен, даже если регулярное выражение окружено ^ и $, чтобы соответствовать полной строке.
Ответ 4
find() будет рассматривать вложенную строку по сравнению с регулярным выражением, где as matches() будет рассматривать полное выражение.
find() возвращает true только в том случае, если подстрока выражения соответствует шаблону.