Использование метода Pattern.matches()
для поиска специальных символов
На этом этапе мы рассмотрим другой способ использования регулярных выражений в Java: метод Pattern.matches()
. В отличие от объекта Matcher
, который мы использовали на предыдущем этапе для поиска всех вхождений шаблона, метод Pattern.matches()
проверяет, соответствует ли весь входной текст заданному регулярному выражению.
Этот метод полезен, когда вам нужно проверить, соответствует ли строка определенному формату, например, содержит ли пароль хотя бы один специальный символ или состоит ли имя пользователя только из разрешенных символов.
Давайте изменим нашу программу HelloJava.java
, чтобы использовать метод Pattern.matches()
для проверки, содержит ли строка любые специальные символы на основе ранее определенного регулярного выражения.
-
Откройте файл HelloJava.java
в редакторе WebIDE.
-
Замените существующий код следующим:
import java.util.regex.Pattern;
public class HelloJava {
public static void main(String[] args) {
String text1 = "Hello World";
String text2 = "Hello World!";
// Define a regex pattern to check for the presence of special characters
// This pattern checks if the string contains at least one character that is NOT a letter, digit, or whitespace
String regex = ".*[^a-zA-Z0-9\\s].*";
boolean containsSpecial1 = Pattern.matches(regex, text1);
boolean containsSpecial2 = Pattern.matches(regex, text2);
System.out.println("String 1: \"" + text1 + "\"");
System.out.println("Contains special characters? " + containsSpecial1);
System.out.println("String 2: \"" + text2 + "\"");
System.out.println("Contains special characters? " + containsSpecial2);
}
}
Рассмотрим изменения:
- Для этого метода нам нужно импортировать только
java.util.regex.Pattern;
.
- Теперь регулярное выражение имеет вид
.*[^a-zA-Z0-9\\s].*
. Разберем его:
.*
: Это соответствует любому символу (.
) ноль или более раз (*
). Первое .*
соответствует любым символам перед специальным символом.
[^a-zA-Z0-9\\s]
: Это тот же класс символов, что и на предыдущем этапе, который соответствует одному специальному символу.
.*
: Это соответствует любому символу (.
) ноль или более раз (*
). Второе .*
соответствует любым символам после специального символа.
- В совокупности,
.*[^a-zA-Z0-9\\s].*
означает "соответствует любой строке, которая содержит хотя бы один символ, который не является буквой, цифрой или пробельным символом".
Pattern.matches(regex, text1)
: Этот статический метод класса Pattern
принимает регулярное выражение и входную строку в качестве аргументов и возвращает true
, если весь текст соответствует шаблону, и false
в противном случае.
-
Сохраните файл (Ctrl+S или Cmd+S).
-
Скомпилируйте программу:
javac HelloJava.java
-
Запустите программу:
java HelloJava
Вы должны увидеть следующий вывод:
String 1: "Hello World"
Contains special characters? false
String 2: "Hello World!"
Contains special characters? true
Этот вывод показывает, что метод Pattern.matches()
правильно определил, что вторая строка содержит специальный символ (!
), а первая - нет.