Heim  >  Artikel  >  Java  >  Warum kann die String.matches()-Methode von Java keine Zeichenfolgen finden, die mehrere Kleinbuchstaben enthalten, wenn ein einfacher Regex wie „[a-z]' verwendet wird?

Warum kann die String.matches()-Methode von Java keine Zeichenfolgen finden, die mehrere Kleinbuchstaben enthalten, wenn ein einfacher Regex wie „[a-z]' verwendet wird?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-26 08:30:16396Durchsuche

Why Does Java's String.matches() Method Fail to Match Strings Containing Multiple Lowercase Characters When Using a Simple Regex Like

String.matches() Regex-Anomalie: Enthüllung der versteckten Regex-Falle

In der Java-Programmierung sieht die Methode String.matches() so aus eine intuitive Möglichkeit, Zeichenfolgen anhand regulärer Ausdrücke zu validieren. Sein Verhalten kann jedoch verwirrend sein, insbesondere im Vergleich zu anderen Programmiersprachen.

Beachten Sie den folgenden Codeausschnitt:

String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
    if(s.matches("[a-z]"))
    {
        System.out.println(s);
    }
}

Dieser Code soll seitdem nur die Zeichenfolge „dkoe“ ausgeben es enthält nur Kleinbuchstaben. Es wird jedoch überraschenderweise nichts gedruckt! Warum ist das so?

Der Kern des Problems liegt in der Natur der String.matches()-Methode. Im Gegensatz zu ähnlichen Methoden in anderen Sprachen versucht matches(), die gesamte Eingabezeichenfolge mit dem bereitgestellten regulären Ausdruck abzugleichen. Mit anderen Worten: Es wird geprüft, ob die gesamte Zeichenfolge mit dem Muster übereinstimmt.

Der reguläre Ausdruck „[a-z]“ stimmt nur mit einem einzelnen Kleinbuchstaben überein. Da keine der Eingabezeichenfolgen nur einen einzigen Kleinbuchstaben enthält, kann die Methode „matches()“ für keine der Zeichenfolgen eine Übereinstimmung finden.

Um dieses Problem zu beheben, können zwei Ansätze gewählt werden:

Ansatz 1: Verwenden von Mustern und Matchern

Pattern p = Pattern.compile("[a-z]+");
Matcher m = p.matcher(inputString);
if (m.find()) {
    // match found
}

Dieser Ansatz verwendet ein Muster und einen Matcher, um das erste Vorkommen zu finden einer Übereinstimmung in der Eingabezeichenfolge. Der reguläre Ausdruck „[a-z]“ entspricht einem oder mehreren Kleinbuchstaben, was dem gewünschten Verhalten entspricht.

Ansatz 2: Anhängen von „“ an die Zeichenklasse

Für einfache Fälle, etwa um zu überprüfen, ob eine Zeichenfolge nur Kleinbuchstaben enthält, können Sie den regulären Ausdruck wie folgt ändern:

if(s.matches("[a-z]+")) {
    // match found
}

Durch Anhängen von „ “ an Mit der Zeichenklasse „[a-z]“ gleicht der reguläre Ausdruck ein oder mehrere Kleinbuchstaben ab und löst so das Problem effektiv.

Wenn Sie das besondere Verhalten von String.matches() verstehen und die bereitgestellten Alternativen nutzen, können Sie dies tun Vermeiden Sie diese häufige Gefahr und validieren Sie Zeichenfolgen effektiv anhand regulärer Ausdrücke in Java.

Das obige ist der detaillierte Inhalt vonWarum kann die String.matches()-Methode von Java keine Zeichenfolgen finden, die mehrere Kleinbuchstaben enthalten, wenn ein einfacher Regex wie „[a-z]' verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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