Класс Java Matcher
В Java,Matcherэтот класс являетсяjava.util.regexважным классом в пакете, используемым для выполнения различных операций сопоставления со строками.MatcherСам класс нельзя напрямую инстанцировать; вместо этого его нужно создавать с помощьюPatternклассаmatcher()метода создания.
MatcherОсновные функции класса включают:
- Выполнение операций сопоставления с регулярными выражениями
- Поиск подпоследовательностей в строке, соответствующих шаблону
- Замена совпавшего текста
Создание объекта Matcher
Чтобы использоватьMatcherкласса, сначала нужно создатьPatternобъект, затем используйте его для созданияMatcherобъект:
Пример
// Создайте объект Pattern
Pattern pattern = Pattern.compile("a*b");
// Создайте объект Matcher
Matcher matcher = pattern.matcher("aaaaab");
Общие методы класса Matcher
Методы операций сопоставления
Метод matches()
matches()Метод пытается сопоставить всю входную последовательность с шаблоном:
Пример
Метод lookingAt()
lookingAt()Метод пытается сопоставить шаблон, начиная с начала входной последовательности:
Пример
Метод find()
find()Метод находит следующую совпадающую подпоследовательность во входной последовательности:
Пример
System.out.println("Найдено совпадение: " + matcher.group());
}
Методы получения информации о совпадениях
Метод group()
group()Метод возвращает входную подпоследовательность, совпавшую при предыдущей операции сопоставления:
Пример
Методы start() и end()
start()иend()Методы возвращают начальный и конечный индексы предыдущего совпадения:
Пример
int end = matcher.end(); // позиция конца совпадения
Метод groupCount()
groupCount()Возвращает количество захватывающих групп в шаблоне этого сопоставителя:
Пример
Методы операций замены
Метод replaceAll()
replaceAll()Метод заменяет каждую подпоследовательность во входной последовательности, соответствующую шаблону:
Пример
Метод replaceFirst()
replaceFirst()Метод заменяет первую подпоследовательность во входной последовательности, соответствующую шаблону:
Пример
Пример
Ниже приведён полный пример, показывающий, как использоватьMatcherкласс:
Пример
public class MatcherExample {
public static void main(String[] args) {
String text = "The quick brown fox jumps over the lazy dog";
Pattern pattern = Pattern.compile("\\b\\w{4}\\b"); // Сопоставить слова из 4 букв
Matcher matcher = pattern.matcher(text);
System.out.println("Исходный текст: " + text);
System.out.println("Совпадения для слов из 4 букв:");
while(matcher.find()) {
System.out.println("Найдено '" + matcher.group() +
"' в позиции " + matcher.start() + "-" + (matcher.end()-1));
}
// Заменить все слова из 4 букв на "****"
String replaced = matcher.replaceAll("****");
System.out.println("\n"Заменённый текст: " + заменено);
}
}
Результат вывода
原始文本: The quick brown fox jumps over the lazy dog 匹配4字母单词: 找到 'quick' 在位置 4-8 找到 'brown' 在位置 10-14 找到 'jumps' 在位置 20-24 找到 'over' 在位置 26-29 找到 'lazy' 在位置 35-38 替换后的文本: The **** **** fox **** **** the **** dog
Итог
JavaMatcherкласс предоставляет мощную функциональность сопоставления с регулярными выражениями, с помощью которой вы можете:
- Проверить, соответствует ли строка заданному шаблону
- Найти совпадения с шаблоном в строке
- Извлечь совпавшие подстроки
- Замена совпавшего текста
ОсвоениеMatcherкласс очень важен для обработки сопоставления строк и текста с шаблонами и является очень практичным инструментом в программировании на Java.
Методы операций сопоставления
| Метод | Описание |
|---|---|
boolean matches() |
Пытается сопоставить всю область с шаблоном |
boolean lookingAt() |
Пытается сопоставить шаблон, начиная с начала области |
boolean find() |
Пытается найти следующую совпадающую подпоследовательность |
boolean find(int start) |
Находит следующее совпадение, начиная с указанной позиции |
Методы получения результатов сопоставления
| Метод | Описание |
|---|---|
String group() |
Возвращает подпоследовательность предыдущего совпадения |
String group(int group) |
Возвращает совпавшее содержимое указанной захватывающей группы |
String group(String name) |
Возвращает совпавшее содержимое именованной захватывающей группы (Java 7+) |
int groupCount() |
Возвращает количество захватывающих групп в шаблоне |
int start() |
Возвращает индекс начала предыдущего совпадения |
int start(int group) |
Возвращает индекс начала совпадения для указанной группы |
int end() |
Возвращает индекс конца предыдущего совпадения |
int end(int group) |
Возвращает индекс конца совпадения для указанной группы |
Методы операций замены
| Метод | Описание |
|---|---|
Matcher appendReplacement(StringBuffer sb, String replacement) |
Выполняет нетерминальную операцию замены |
StringBuffer appendTail(StringBuffer sb) |
Выполняет терминальную операцию замены |
String replaceAll(String replacement) |
Заменяет все совпадающие подпоследовательности |
String replaceFirst(String replacement) |
Заменяет первую совпадающую подпоследовательность |
static String quoteReplacement(String s) |
Возвращает литерал строки замены |
Методы управления регионом
| Метод | Описание |
|---|---|
Matcher region(int start, int end) |
Устанавливает регион поиска сопоставителя |
int regionStart() |
Возвращает начальный индекс региона сопоставителя |
int regionEnd() |
Возвращает конечный индекс региона сопоставителя |
boolean hasTransparentBounds() |
Проверяет, используются ли прозрачные границы |
Matcher useTransparentBounds(boolean b) |
Устанавливает, используются ли прозрачные границы |
boolean hasAnchoringBounds() |
Проверяет, используются ли границы привязки |
Matcher useAnchoringBounds(boolean b) |
Устанавливает, используются ли границы привязки |
Другие методы
| Метод | Описание |
|---|---|
Pattern pattern() |
Возвращает шаблон этого сопоставителя |
Matcher reset() |
Сбрасывает сопоставитель |
Matcher reset(CharSequence input) |
Сбрасывает сопоставитель с новым вводом |
boolean hitEnd() |
Указывает, достиг ли сопоставитель конца ввода |
boolean requireEnd() |
Указывает, требуется ли дополнительный ввод для сопоставления |