So vergleichen Sie zwei Strings in Java

โšก Intelligente Zusammenfassung

Vergleichen zweier Zeichenketten in Java Dies kann mit verschiedenen Methoden erfolgen, die eine Zeichenfolge auf Gleichheit oder Reihenfolge prรผfen. Diese Ressource erlรคutert sieben Ansรคtze, darunter `String equals`, `Objects equals`, `compareTo`, Methoden aus `StringUtils`, den Operator `==` und eine benutzerdefinierte Vergleichsmethode, jeweils mit Beispielen.

  • ๐ŸŸฐ String equals(): Vergleicht zwei Zeichenkettenwerte auf Gleichheit (GroรŸ-/Kleinschreibung beachten) und gibt true oder false zurรผck.
  • ๐Ÿ“ฆ Objekte equals(): Vergleicht zwei Zeichenketten sicher und behandelt zwei Nullwerte als gleich.
  • ๐Ÿ”ค compareTo(): Vergleicht Zeichenketten in lexikographischer Reihenfolge und gibt Null, eine negative oder eine positive Zahl zurรผck.
  • ๐Ÿงฐ StringUtils-Methoden: Die Funktionen equals() und equalsAny() von Apache Commons vergleichen Zeichenketten und behandeln Nullwerte auf elegante Weise.
  • โš ๏ธ == Operator: Es vergleicht Objektverweise, nicht Inhalte, daher sollte es nicht fรผr Wertvergleiche verwendet werden.

So vergleichen Sie zwei Strings in Java

Methoden zum Vergleichen von Zeichenfolgen in Java

Java bietet verschiedene Methoden, die Sie nutzen kรถnnen, um zwei Zeichenfolgen zu vergleichen in Java. Stringvergleich in Java ist eine Funktion, die eine Zeichenfolge einer Zeichenfolge zuordnet.

Um zu erfahren, wie man Zeichenfolgen vergleicht in JavaSie kรถnnen die Methoden der folgenden Klassen verwenden:

  • Die Klasse String aus dem Paket java.lang.
  • Die Klasse โ€žObjectsโ€œ aus dem Paket โ€žjava.utilโ€œ.
  • StringUtils-Klasse aus dem Paket org.apache.commons.lang3.

Die meisten davon Java Methoden zum Vergleichen von Zeichenketten bieten Lรถsungen, um die GroรŸ- und Kleinschreibung zu ignorieren. In diesem Tutorial lernen Sie die verschiedenen Methoden kennen, mit denen Sie zwei Zeichenketten vergleichen kรถnnen.

Methode 1: String-equals()-Methode

Das Java Schnur equal()-Methode vergleicht zwei String-Objekte auf gleiche String-Werte.

Syntax:

public boolean equals(Object anObject)

Parameter der Methode equal():

anObject โ€“ Die Argumentzeichenfolge zum Vergleichen von Zeichenfolgen.

Rรผckgabetypen der Methode equal()

  • Gibt true zurรผck, wenn das angegebene String-Literal mit dem ersten String รผbereinstimmt.
  • Gibt โ€žfalseโ€œ zurรผck, wenn die erste Zeichenfolge nicht mit der Argumentzeichenfolge รผbereinstimmt.

Ejemplo:

public class CompareTwoStrings {
 public static void main(String[] args) {
   String stringOne = "Guru99";
   String stringTwo = "Guru99";
   System.out.println("is Guru99 equal to Guru99: "+stringOne.equals(stringTwo));
   String stringThree = "GURU99";
   System.out.println("is Guru99 equal to GURU99: "+stringOne.equals(stringThree));
  }
}

Erwartete Ausgabe:

is Guru99 equal to Guru99: true
is Guru99 equal to GURU99: false

Erlรคuterung:

  • Sie haben in der letzten Ausgabe โ€žfalseโ€œ erhalten, weil das angegebene Objekt eine andere GroรŸ-/Kleinschreibung hat.

Hinweis: Verwenden Sie die Methode `equals()` fรผr einen Vergleich von Zeichenketten unter Berรผcksichtigung der GroรŸ-/Kleinschreibung. Mit der Methode `equalsIgnoreCase` kรถnnen Sie Zeichenketten vergleichen, ohne die GroรŸ-/Kleinschreibung zu berรผcksichtigen.

Methode 2: Objects equal()-Methode

Das Java Objekte sind gleich () Die Methode vergleicht zwei Zeichenfolgenobjekte, um herauszufinden, ob sie dieselben Werte haben.

Syntax:

public static boolean equals(Object a, Object b)

Parameter der Methode equal()

a โ€“ Argumentzeichenfolge fรผr das erste Zeichenfolgenobjekt.

b โ€“ Argumentzeichenfolge fรผr das zweite Zeichenfolgenobjekt.

Rรผckgabetypen der Methode equal()

  • Gibt true zurรผck, wenn die String-Literale gleich sind. Die รœbergabe eines Nullwerts in den beiden Argumenten gibt ebenfalls โ€žtrueโ€œ zurรผck.
  • Gibt โ€žfalseโ€œ zurรผck, wenn die Zeichenfolgenliterale nicht gleich sind.

Ejemplo:

import java.util.Objects;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringOne, stringTwo));
        String stringThree = null;
        String stringFour = null;
        System.out.println("is Guru99 equal to Guru99: " + Objects.equals(stringThree, stringFour));
    }
}

Ausgang:

is Guru99 equal to Guru99: true
is Guru99 equal to Guru99: true

Erlรคuterung:

An diesem Beispiel kann man sehen, dass die Ausgabe ein boolescher Wert von โ€žtrueโ€œ ist, da die verglichenen Zeichenketten gleich sind.

Methode 3: String-compareTo()-Methode

Das Java Zeichenfolge vergleichen mit() Die Methode vergleicht zwei Zeichenfolgen in alphabetischer Reihenfolge. Dies wird normalerweise als lexikografische Reihenfolge bezeichnet.

Syntax:

public int compareTo(String str)

Parameter der Methode โ€žcompareTo()โ€œ.

str โ€“ Die Zeichenfolge, die mit der aktuellen Zeichenfolge verglichen werden soll.

Die Methode โ€žcompareTo()โ€œ gibt zurรผck

  • 0 โ€“ Gibt Null zurรผck, wenn das angegebene Objekt gleich der aktuellen Zeichenfolge ist.
  • < 0 โ€“ Gibt eine Zahl kleiner als Null zurรผck, wenn diese Zeichenfolge kleiner als das angegebene Objekt ist.
  • > 0 โ€“ Gibt eine Zahl grรถรŸer als Null zurรผck, wenn diese Zeichenfolge die angegebene Zeichenfolge รผberschreitet.

Ejemplo:

public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + stringOne.compareTo(stringTwo));
        String stringThree = "GURU99";
		// u = 117, U = 85, result = 117-85 = 32
        System.out.println("is Guru99 equal to GURU99: " + stringOne.compareTo(stringThree));
    }
}

Erwartete Ausgabe:

is Guru99 equal to Guru99: 0
is Guru99 equal to GURU99: 32

Erlรคuterung:

Das erste Ergebnis liefert den Wert Null, da die erste und die zweite Zeichenkette gleich sind.

Das zweite Ergebnis liefert den Wert zweiunddreiรŸig, da die Zeichen unterschiedlich sind.

Hinweis: Um die GroรŸ-/Kleinschreibung zu ignorieren, kรถnnen Sie die Methode โ€žcompareToIgnoreCaseโ€œ verwenden.

Methode 4: StringUtils-equals()-Methode

Das Java StringUtils ist gleich() Methode vergleicht die Gleichheit zweier Zeichenfolgen.

Stellen Sie sicher, dass Sie die Bibliothek โ€žorg.apache.commons.lang3โ€œ in Ihr Programm eingebunden haben. Dadurch kรถnnen Sie Zeichenketten mithilfe der StringUtils-Methoden vergleichen.

Verwenden Sie dies fรผr Maven-Projekte Entwicklung um die Bibliothek zum Projekt hinzuzufรผgen.

Wenn Sie die Bibliothek jedoch ohne Build-Tools hinzufรผgen mรถchten, verwenden Sie Folgendes: Entwicklung.

Syntax:

public static boolean equals(CharSequence cs1, CharSequence cs2)

StringUtils-equals()-Methodenparameter

  • cs1 โ€“ Eine Zeichenfolge fรผr das erste Argument.
  • cs2 โ€“ Eine Zeichenfolge fรผr das zweite Argument.

Die Methode โ€žequals()โ€œ von StringUtils gibt zurรผck

  • Gibt โ€žtrueโ€œ zurรผck, wenn der Zeichenkettenvergleich positiv ist. Dies gilt auch, wenn Sie in den beiden Argumenten einen Nullwert รผbergeben.
  • Gibt โ€žfalseโ€œ zurรผck, wenn der Zeichenfolgenvergleich nicht gleich ist.

Ejemplo:

import org.apache.commons.lang3.StringUtils;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + StringUtils.equals(stringOne, stringTwo));
        String stringThree = "GURU99";
        System.out.println("is Guru99 equal to GURU99: " + StringUtils.equals(stringOne, stringThree));
    }
}

Ausgang:

is Guru99 equal to Guru99: true
is Guru99 equal to GURU99: false

Erlรคuterung:

Da der Inhalt der ersten und zweiten Zeichenfolge gleich ist, gibt das Ergebnis โ€žtrueโ€œ zurรผck.

Sie kรถnnen die Methode โ€žequalsIgnoreCaseโ€œ verwenden, um die GroรŸ-/Kleinschreibung zu ignorieren.

Methode 5: StringUtils equalAny()-Methode

Das Java StringUtils ist gleichAny() Die Methode prรผft, ob in den Argumenten eine Zeichenfolge vorhanden ist.

Syntax:

public static boolean equalsAny(CharSequence string, CharSequence... searchStrings)

StringUtils-equalsAny()-Methodenparameter

  • string โ€“ Der Stringwert fรผr das erste Argument. Das Argument kann auch einen Nullwert haben.
  • searchStrings โ€“ Eine Reihe von Zeichenfolgenargumenten fรผr die Methode, um herauszufinden, ob die erste Argumentzeichenfolge vorhanden ist.

Die StringUtils-Methode equalAny() gibt zurรผck

  • Gibt โ€žtrueโ€œ zurรผck, wenn die zu vergleichende Zeichenkette in der variablen Anzahl der Suchzeichenketten enthalten ist. Dies gilt auch, wenn beide Argumente null sind.
  • Gibt โ€žfalseโ€œ zurรผck, wenn die zu vergleichende Zeichenfolge mit keiner Zeichenfolge in der variablen Anzahl von Suchzeichenfolgen รผbereinstimmt.

Ejemplo:

import org.apache.commons.lang3.StringUtils;
public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String[] stringTwo = new String[] {
            "Guru99",
            "JavaGuru99"
        };
        System.out.println("is Guru99 available: " +
            StringUtils.equalsAny(stringOne, stringTwo));
        String[] stringThree = new String[] {
            "GURU99",
            "JavaGuru99"
        };
        System.out.println("is GURU99 available: " +
            StringUtils.equalsAny(stringOne, stringThree));
    }
}

Ausgang:

is Guru99 available: true
is GURU99 available: false

Erlรคuterung:

Da der Inhalt der ersten Zeichenfolge und der zweiten Zeichenfolge gleich ist, gibt das Ergebnis โ€žtrueโ€œ zurรผck. Sie kรถnnen die Methode โ€žequalsAnyIgnoreCaseโ€œ verwenden, um die GroรŸ-/Kleinschreibung zu ignorieren.

Methode 6: Verwenden des ==-Operators

Der ==-Operator fรผr Zeichenfolgen prรผft, ob Objektreferenzen dieselbe Adresse haben.

Ejemplo:

public class CompareTwoStrings {
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 == to Guru99: " + (stringOne == stringTwo));
        String stringThree = "GURU99";
        System.out.println("is Guru99 == to GURU99: " + (stringOne == stringThree));
    }
}

Erwartete Ausgabe:

is Guru99 == to Guru99: true
is Guru99 == to GURU99: false

Erlรคuterung:

  • Das erste Ergebnis liefert den booleschen Wert โ€žtrueโ€œ. Zeichenketten mit gleichem Inhalt werden demselben Zeichenkettenpool hinzugefรผgt und teilen sich daher eine Adresse.
  • Das zweite Ergebnis liefert den booleschen Wert โ€žfalseโ€œ. Die Objekte haben unterschiedliche Inhalte, was zu unterschiedlichen String-Pools fรผhrt. Das bedeutet, dass die Strings separate Objektverweise haben; daher ist die Ausgabe โ€žfalseโ€œ.

Methode 7: Erstellen einer benutzerdefinierten Methode zum Vergleichen zweier Zeichenfolgen in Java

Erstellen Sie eine Methode, die zwei Zeichenfolgen in lexikografischer Reihenfolge vergleicht.

Syntax:

public static int compareTwoStrings(String str1, String str2)

Benutzerdefinierte Methodenparameter

  • str1 โ€“ Die zu vergleichende Zeichenfolge.
  • str2 โ€“ Die Zeichenfolge, mit der verglichen werden soll.

Benutzerdefinierte Methode gibt zurรผck

  • 0 โ€“ Gibt Null zurรผck, wenn die erste Zeichenfolge gleich der zweiten Zeichenfolge ist.
  • < 0 โ€“ Gibt eine Zahl kleiner als Null zurรผck, wenn die erste Zeichenfolge kleiner als die zweite Zeichenfolge ist.
  • > 0 โ€“ Gibt eine Zahl grรถรŸer als Null zurรผck, wenn die erste Zeichenfolge grรถรŸer als die zweite Zeichenfolge ist.

Ejemplo:

public class CompareTwoStrings {
    public static int compareTwoStrings(String stringOne, String stringTwo) {
        int lengthOfStringOne = stringOne.length();
        int lengthOfStringTwo = stringTwo.length();
        int minStringLength = Math.min(lengthOfStringOne, lengthOfStringTwo);
        for (int i = 0; i < minStringLength; i++) {
            char stringOneCharValue = stringOne.charAt(i);
            char stringTwoCharValue = stringTwo.charAt(i);
            if (stringOneCharValue != stringTwoCharValue) {
                return stringOneCharValue - stringTwoCharValue;
            }
        }
        if (lengthOfStringOne != lengthOfStringTwo) {
            return lengthOfStringOne - lengthOfStringTwo;
        } else {
            return 0;
        }
    }
    public static void main(String[] args) {
        String stringOne = "Guru99";
        String stringTwo = "Guru99";
        System.out.println("is Guru99 equal to Guru99: " + compareTwoStrings(stringOne, stringTwo));
    }
}

Erwartete Ausgabe:

is Guru99 equal to Guru99: 0

Erlรคuterung:

Das Ergebnis ergab den Wert Null, was bedeutet, dass die benutzerdefinierte Funktion wie erwartet funktioniert.

Hรคufig gestellte Fragen

Ja. KI-Assistenten kรถnnen je nach Zielsetzung equals, compareTo oder StringUtils empfehlen und auf die hรคufige Fehlerquelle == hinweisen. Sie sollten die Auswahl dennoch anhand Ihrer spezifischen Daten testen.

Ja. KI-Tools erkennen den Missbrauch des Gleichheitszeichens == beim Inhaltsvergleich und schlagen stattdessen equals oder equalsIgnoreCase vor. Dies hilft, subtile Gleichheitsfehler zu reduzieren, die Anfรคngern im Umgang mit Zeichenketten hรคufig unterlaufen.

Der Operator == vergleicht Objektverweise, nicht deren Inhalte. Zwei Zeichenketten mit demselben Wert kรถnnen unterschiedliche Verweise haben, daher kann == den Wert false zurรผckgeben. Verwenden Sie equals() fรผr einen zuverlรคssigen Wertvergleich.

Die equals()-Methode unterscheidet zwischen GroรŸ- und Kleinschreibung, daher โ€žGuruโ€ž99โ€œ und โ€žGURU99โ€œ sind nicht gleich. Die Methode equalsIgnoreCase() vergleicht Zeichenketten unter Missachtung von GroรŸ- und Kleinschreibung und gibt fรผr beide โ€žtrueโ€œ zurรผck.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: