Verwendung von Pattern.matches()
für Sonderzeichen
In diesem Schritt werden wir eine andere Möglichkeit erkunden, reguläre Ausdrücke in Java zu verwenden: die Methode Pattern.matches()
. Im Gegensatz zum Matcher
-Objekt, das wir im vorherigen Schritt verwendet haben, um alle Vorkommen eines Musters zu finden, überprüft Pattern.matches()
, ob der gesamte Eingabestring dem angegebenen regulären Ausdruck entspricht.
Diese Methode ist nützlich, wenn Sie überprüfen möchten, ob ein String einem bestimmten Format entspricht, beispielsweise ob ein Passwort mindestens ein Sonderzeichen enthält oder ob ein Benutzername nur erlaubte Zeichen enthält.
Lassen Sie uns unser HelloJava.java
-Programm ändern, um Pattern.matches()
zu verwenden, um zu prüfen, ob ein String irgendein Sonderzeichen enthält, basierend auf unserem zuvor definierten regex.
-
Öffnen Sie die Datei HelloJava.java
im WebIDE-Editor.
-
Ersetzen Sie den vorhandenen Code durch folgenden:
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);
}
}
Schauen wir uns die Änderungen an:
- Wir müssen nur
java.util.regex.Pattern;
für diese Methode importieren.
- Das regex-Muster lautet jetzt
.*[^a-zA-Z0-9\\s].*
. Lassen Sie uns dies aufschlüsseln:
.*
: Dies passt auf ein beliebiges Zeichen (.
) null oder mehrmals (*
) zu. Das erste .*
passt auf alles vor dem Sonderzeichen.
[^a-zA-Z0-9\\s]
: Dies ist dieselbe Zeichenklasse wie im vorherigen Schritt und passt auf ein einzelnes Sonderzeichen.
.*
: Dies passt auf ein beliebiges Zeichen (.
) null oder mehrmals (*
) zu. Das zweite .*
passt auf alles nach dem Sonderzeichen.
- Zusammen bedeutet
.*[^a-zA-Z0-9\\s].*
"passt auf jeden String, der mindestens ein Zeichen enthält, das kein Buchstabe, keine Ziffer oder kein Leerzeichen ist".
Pattern.matches(regex, text1)
: Diese statische Methode der Pattern
-Klasse nimmt das regex-Muster und den Eingabestring als Argumente und gibt true
zurück, wenn der gesamte String dem Muster entspricht, und false
sonst.
-
Speichern Sie die Datei (Strg+S oder Cmd+S).
-
Kompilieren Sie das Programm:
javac HelloJava.java
-
Führen Sie das Programm aus:
java HelloJava
Sie sollten die folgende Ausgabe sehen:
String 1: "Hello World"
Contains special characters? false
String 2: "Hello World!"
Contains special characters? true
Diese Ausgabe zeigt, dass Pattern.matches()
korrekt erkannt hat, dass der zweite String ein Sonderzeichen (!
) enthält, während der erste dies nicht tut.