Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Использование regex в методе String.contains() в Java

Быстрый ответ

Java
Скопировать код
String текст = "Привет, StackOverflow!";
String регулярноеВыражение = ".*StackOverflow.*"; 

boolean содержит = Pattern.compile(регулярноеВыражение).matcher(текст).find();

boolean содержитРегулярныеВыражения(String строка, String паттерн) {
    return Pattern.compile(паттерн).matcher(строка).find();
}

boolean результат = содержитРегулярныеВыражения(текст, регулярноеВыражение);
Кинга Идем в IT: пошаговый план для смены профессии

Эксперименты с String.matches()

Метод String.contains() предназначен для поиска конкретных подстрок, но он не поддерживает работу с регулярными выражениями:

Java
Скопировать код
String безопаснаяСтрока = "123 безопасный";
boolean безопасно = безопаснаяСтрока.contains("\\d+"); // Возвращает false.

С помощью String.matches() можно выполнять полное совпадение с шаблоном, а для частичного совпадения предусмотрен Matcher.find().

Обработка специальных символов

Для корректной работы с специальными символами в регулярных выражениях используйте Pattern.quote():

Java
Скопировать код
String хитраяСтрока = "10$купюра";
String защищенныйРегекс = "\\b" + Pattern.quote(хитраяСтрока) + "\\b";
boolean защищенно = содержитРегулярныеВыражения(безопаснаяСтрока, защищенныйРегекс);

Сила границ слов

Применяйте \\b для поиска целых слов. Это позволит избежать ситуаций, когда "кошка" совпадает с "гусеница".

Урок оптимизации

Если вам нужно повторно использовать один шаблон, скомпилируйте его однажды:

Java
Скопировать код
Pattern шаблонNарушителя = Pattern.compile("повторныйНарушитель");

Обработка исключений

Для защиты кода от PatternSyntaxException применяйте блоки try-catch:

Java
Скопировать код
try {
    Pattern опасныйШаблон = Pattern.compile("some(?:dangerousPattern");
} catch (PatternSyntaxException исключение) {
    // Обработка исключения.
}

Различия между find() и matches()

Matcher.matches() проверяет полное совпадение, а Matcher.find() — наличие частичных совпадений.

Особенности работы с многострочными выражениями

Для обработки многострочных строк с помощью .matches, используйте (?s):

Java
Скопировать код
String многострочныйДокумент = "Первая строка.\nВторая строка.\nТретья строка.";
boolean многострочноеСовпадение = содержитРегулярныеВыражения(многострочныйДокумент, "(?s)Первая.*Третья");

Умения "техно-ниндзя" с Pattern и Matcher

Их можно активно использовать для решения различных задач в программировании:

Поиск паттернов

Java
Скопировать код
Matcher m = pattern.matcher(текст);
while (m.find()) {
    System.out.println("Найдено в позиции: " + m.start());
}
Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Замена всех совпадений

Java
Скопировать код
String новыйТекст = m.replaceAll("новыйПерсонаж");

Извлечение групп

Java
Скопировать код
if (m.find()) {
    String группа = m.group(1);
}

Визуализация

.contains() можно представить как библиотекаря, ищущего конкретную книгу:

Java
Скопировать код
String книжнаяПолка = "Java, Python, Go, Rust";
boolean естьJava = книжнаяПолка.contains("Java");

Тогда как регулярные выражения – это библиотекарь-сканнер, который ищет книги по определенным критериям:

Java
Скопировать код
Pattern pattern = Pattern.compile("Java|Python");
Matcher matcher = pattern.matcher(книжнаяПолка);
boolean найденаИскомаяКнига = matcher.find();

.contains() подходит для точного совпадения, а Pattern и Matcher предлагают больше гибкости в поиске.

Полезные материалы

  1. String (Java SE 11 & JDK 11) — документация Java по методу String.contains().
  2. Pattern (Java SE 11 & JDK 11) — подробная информация о классе Pattern.
  3. Matcher (Java SE 11 & JDK 11) — справка по Matcher.
  4. Регулярные выражения в Java – Учебник — глубокое погружение в мир regex.
  5. matches() против find() в регулярных выражениях Java — основные отличия между matches() и find().
  6. Методы класса Pattern — практическое руководство по Pattern.
  7. Онлайн проверка регулярных выражений для Java — платформа для тестирования и экспериментирования с регулярными выражениями в Java.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод в Java используется для поиска подстроки в строке?
1 / 5