Menu
Coddy logo textTech

Сопоставление шаблонов с Regex

Часть раздела Логика и управление потоком путешествия по Java на Coddy — урок 47 из 59.

Классы Pattern и Matcher предоставляют мощные инструменты для операций с регулярными выражениями в Java. Сначала разберёмся, как их использовать:

Создайте pattern с помощью Pattern.compile():

Pattern pattern = Pattern.compile("cat");
// Creates a pattern to find "cat"

Создайте matcher для вашего текста:

String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// Создаёт matcher для текста

Теперь вы можете находить совпадения с помощью matcher.find():

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}

После выполнения приведённого выше кода вывод: Found at: 4

Понимание методов:

  • <b>matcher.find()</b> - Ищет следующее вхождение шаблона в текст
    • Возвращает true, если совпадение найдено
    • Возвращает false, если больше нет совпадений
    • Вот почему мы используем его в цикле while - чтобы найти все вхождения
  • <b>matcher.start()</b> - Возвращает начальный индекс (позицию) последнего совпадения, найденного методом find()
    • В нашем примере, "cat" начинается с индекса 4 в "The cat and dog"
    • Должен вызываться после успешного find()

Пример с несколькими совпадениями:

Pattern pattern = Pattern.compile("cat");
Matcher matcher = pattern.matcher("cat and cat");

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}
// Output:
// Found at: 0
// Found at: 8
challenge icon

Задание

Легко

Создайте метод с именем findWords, который принимает два аргумента:

  1. Строка (text) для поиска в ней
  2. Строка (word) для поиска

Метод должен:

  1. Использовать Pattern и Matcher для поиска всех вхождений слова
  2. Вернуть строку, содержащую позиции, где найдено слово
  3. Позиции должны быть разделены пробелами

Возвращаемые сообщения должны быть:

  • Если любой входной параметр равен null: вернуть "Invalid input"
  • Если слово не найдено: вернуть "Not found"
  • Если найдено: вернуть позиции (например, "4 10 15")

Шпаргалка

Классы Pattern и Matcher предоставляют мощные инструменты для операций с регулярными выражениями в Java.

Создайте pattern с помощью Pattern.compile():

Pattern pattern = Pattern.compile("cat");
// Creates a pattern to find "cat"

Создайте matcher для вашего текста:

String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// Creates a matcher for the text

Найдите совпадения с помощью matcher.find():

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}

Ключевые методы:

  • <b>matcher.find()</b> — ищет следующее вхождение шаблона
    • Возвращает true, если найдено, false, если больше нет совпадений
    • Используйте в цикле для поиска всех вхождений
  • <b>matcher.start()</b> — возвращает начальный индекс последнего найденного совпадения
    • Вызывайте после успешного find()

Попробуйте сами

import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static String findWords(String text, String word) {
        // Напишите свой код здесь
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        String word = scanner.nextLine();
        
        if (text.equals("null")) text = null;
        if (word.equals("null")) word = null;
        
        System.out.println(findWords(text, word));
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком