Matcher.results()
Возвращает все совпадения сразу в виде потока — короткая замена цикла с find().
Доступно с: Java 9
Синтаксис
public Stream<MatchResult> results()Возвращаемое значение
Stream<MatchResult>Поток объектов MatchResult с методами group(), start(), end().
Примеры
Все хештеги текста в список:
void main() {
String post = "Learning #java and #regex today #java";
List<String> tags = Pattern.compile("#(\\w+)").matcher(post)
.results()
.map(r -> r.group(1))
.distinct()
.toList();
IO.println(tags);
}Результат:
[java, regex]Примечания
Поток вычисляется лениво и использует состояние Matcher, поэтому его нельзя перебрать дважды. Для подсчёта совпадений удобно results().count().
См. также
- Matcher.find() — Ищет следующее совпадение шаблона в любом месте строки.
- Matcher.group() — Возвращает текст найденного совпадения или его группы в скобках.
- Pattern.matcher() — Создаёт объект Matcher, который ищет совпадения шаблона в конкретной строке.
В учебнике
- Регулярные выражения — Регулярные выражения в Java: matches, replaceAll, split по шаблону, классы Pattern и Matcher, группы и экранирование обратной косой черты.