Verstehen der Diskrepanz in String.matches()
Beim Versuch, Zeichenfolgen mithilfe regulärer Ausdrücke in Java zu validieren, kann es zu einem unerwarteten Verhalten kommen mit der String.matches()-Methode. Während die Absicht dieser Methode impliziert, einen Teilstring innerhalb eines Strings abzugleichen, versucht sie tatsächlich, den gesamten String mit dem bereitgestellten regulären Ausdruck abzugleichen.
Bedenken Sie den folgenden Codeausschnitt:
String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("[a-z]")) { System.out.println(s); } }
As Sie haben bemerkt, dass dieser Code die erwartete Ausgabe („dkoe“) nicht ausgibt, da er nicht mit der gewünschten Teilzeichenfolge übereinstimmt, sondern prüft, ob die gesamte Zeichenfolge nur Kleinbuchstaben enthält Buchstaben.
Die Lösung: Verwenden von Pattern und Matcher
Um dieses Problem zu beheben, sollten Sie zur Bestimmung die Klassen Pattern und Matcher zusammen mit der Methode .find() verwenden wenn ein regulärer Ausdruck mit einer beliebigen Teilzeichenfolge im Eingabetext übereinstimmt. Dieser Ansatz umfasst die folgenden Schritte:
Hier ein Beispiel:
Pattern p = Pattern.compile("[a-z]"); Matcher m = p.matcher(inputstring); if (m.find()) // match found
Wenn Sie sicherstellen möchten, dass die Eingabe nur Kleinbuchstaben enthält, können Sie den folgenden regulären Ausdruck verwenden: ^[a-z] $ . Vergessen Sie nicht, .find() anstelle von .matches() zu verwenden.
Das obige ist der detaillierte Inhalt vonWarum kann „String.matches()' von Java keine Teilzeichenfolgen abgleichen und wie kann ich Teilzeichenfolgen mit regulären Ausdrücken korrekt abgleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!