Heim > Java > javaLernprogramm > Warum kann „String.matches()' von Java keine Teilzeichenfolgen abgleichen und wie kann ich Teilzeichenfolgen mit regulären Ausdrücken korrekt abgleichen?

Warum kann „String.matches()' von Java keine Teilzeichenfolgen abgleichen und wie kann ich Teilzeichenfolgen mit regulären Ausdrücken korrekt abgleichen?

DDD
Freigeben: 2024-12-02 03:14:15
Original
880 Leute haben es durchsucht

Why Does Java's `String.matches()` Fail to Match Substrings, and How Can I Correctly Match Substrings Using Regular Expressions?

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);
    }
}
Nach dem Login kopieren

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:

  1. Erstellen Sie ein Musterobjekt, indem Sie den regulären Ausdruck kompilieren.
  2. Erstellen Sie ein Matcher-Objekt, indem Sie das Muster auf die Eingabezeichenfolge anwenden.
  3. Verwenden Sie die .find()-Methode des Matchers, um zu prüfen, ob das Muster mit einem übereinstimmt Teilzeichenfolge.

Hier ein Beispiel:

Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(inputstring);
if (m.find())
    // match found
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage