Menu
CoddyTech

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

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

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

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

Pattern pattern = Pattern.compile("cat");
// Создаёт шаблон для поиска "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

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

  • matcher.find() — ищет следующее вхождение шаблона в тексте
    • Возвращает true, если совпадение найдено
    • Возвращает false, если больше совпадений нет
    • Именно поэтому мы используем его в цикле while — чтобы найти все вхождения
  • matcher.start() — возвращает начальный индекс (позицию) последнего совпадения, найденного с помощью 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());
}
// Вывод:
// Найдено в: 0
// Найдено в: 8
challenge icon

Задание

Легко

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

  1. String (text) для поиска
  2. String (word) для поиска

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

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

Метод должен возвращать следующие сообщения:

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

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

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Проверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Java

Проверьте шаблон на своём тексте: Тестер Regex