Matcher представляет собой класс, из которого создаётся объект для поиска совпадений по шаблону. Matcher — это «поисковик», «движок» регулярных выражений. Для поиска ему надо дать:
- Шаблон поиска
- «Адрес», по которому искать
Для создания объекта Matcher предусмотрен следующий метод в классе Pattern :
В качестве аргумента метод принимает последовательность символов для поиска. Это объекты классов — реализаций интерфейса CharSequence :
- String
- StringBuilder
- StringBuffer
- CharBuffer
- Segment
Пример создания Matcher-а :
Pattern p = Pattern.compile("a*b");// скомпилировали регулярное выражение в представление
Matcher m = p.matcher("aaaaab");//создали поисковик в тексте “aaaaab” по шаблону "a*b"
Теперь с помощью «поисковика» можно искать совпадения, узнавать позицию совпадения в тексте, заменять текст с помощью методов класса.
Методы класса Matcher :
- boolean find() — ищет очередное совпадение в тексте с шаблоном. С помощью этого метода и оператора цикла можно производить анализ всего текста по событийной модели (осуществлять необходимые операции при наступлении события – нахождении совпадения в тексте)
- int start() — номер первого символа очередного совпадения в тексте
- int end() — номер последнего символа очередного совпадения в тексте
- String replaceFirst(String replacement) — замена первого совпадения в тексте с шаблоном на replacement
- String replaceAll(String replacement) — замена всех совпадений в тексте с шаблоном на replacement
Пример кода :
public static void main(String[] args) {
String text = "Егор Алла Анна";
Pattern pattern = Pattern.compile("А.+?а");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
int start=matcher.start();
int end=matcher.end();
System.out.println("Найдено совпадение " + text.substring(start,end) + " с "+ start + " по " + (end-1) + " позицию");
}
System.out.println(matcher.replaceFirst("Ира"));
System.out.println(matcher.replaceAll("Ольга"));
System.out.println(text);
}
Вывод программы:
Найдено совпадение Алла с 5 по 8 позицию
Найдено совпадение Анна с 10 по 13 позицию
Егор Ира Анна
Егор Ольга Ольга
Егор Алла Анна
Из примера видно, что методы replaceFirst
и replaceAll
создают новый объект String
– строку, представляющую собой исходный текст, в котором совпадения с шаблоном заменены на текст, переданный методу в качестве аргумента. Причём метод replaceFirst
заменяет только первое совпадение, а replaceAll
– все совпадения в тесте. Исходный текст остается без изменений.
Использование других методов класса Matcher
, а также примеры регулярных выражений можно посмотреть в этом цикле статей. Наиболее частые операции с регулярными выражениями при работе с текстом из классов Pattern
и Matcher
встроены в класс String
. Это такие методы как split
, matches
, replaceFirst
, replaceAll
. Но на самом деле «под капотом» они используют классы Pattern
и Matcher
. Поэтому, если вам нужно заменить текст или сравнить строки в программе без написания лишнего кода, можно использовать методы класса String
. Если же нужны расширенные возможности – пригодятся классы Pattern
и Matcher
.