In diesem Beitrag werden verschiedene Möglichkeiten zum Vergleichen zweier Strings in Java untersucht equals() und compareTo() Methoden von String Klasse, equals() Methode der Objects Klasse, und StringUtils Klasse der Apache Commons-Bibliothek.
1. Vermeiden Sie Gleichheitsoperatoren (==) Methode
Jeder Java-Programmierer sollte diesen Equal-to-Operator kennen == sollte nicht für Stringsgleichheit verwendet werden, da es auf Referenzgleichheit prüft, dh ob zwei Strings auf dasselbe Objekt zeigen oder nicht. Dieses Verhalten wird im Folgenden demonstriert:
classMain { publicstaticvoid main(String[]args) { Strings1=newString("Equal-to operator in Java"); Strings2=new String("Equal-to operator in Java"); System.out.println(s1==s2); // Wird als falsch ausgewertet System.out.println(null==s2); // Wird als falsch ausgewertet System.out.println(s1 ==null); // Wird als falsch ausgewertet System.out.println(null==null); // Wird als wahr ausgewertet } } |
Herunterladen Code ausführen
Seit der == überprüft, ob die Verweise auf die Objekte gleich sind oder nicht, kann er für zwei String-Literale mit gleichem Wert true zurückgeben, da sie dasselbe Objekt im JVM-String-Pool teilen, wie unten gezeigt.
Es wird empfohlen, sich nicht auf ein solches Verhalten zu verlassen und Standardmethoden für die Zeichenfolgengleichheit zu verwenden.
classMain { publicstaticvoid main(String[]args) { Strings1=newString("Equal-to operator in Java"); Strings2=new String("Equal-to operator in Java"); // Wird als wahr ausgewertet, da beide Objekte auf dieselbe Referenz zeigen // im String-Pool System.out.println(s1== s2); } } |
Herunterladen Code ausführen
2. Verwenden String.equals() Methode
Java String Klasse hat die equals() Methode, die den tatsächlichen Inhalt einer Zeichenfolge mit einer anderen Zeichenfolge vergleicht und einen booleschen Wert zurückgibt, der bestimmt, ob sie gleich sind oder nicht. Das String Klasse bietet außerdem:
- equalsIgnoreCase(String) Methode, die der ähnlich ist equals() -Methode, außer dass die Groß-/Kleinschreibung von Zeichen im String ignoriert wird.
- contentEquals(CharSequence) -Methode, die die Zeichenfolge mit der angegebenen CharSequence vergleicht.
- contentEquals(StringBuffer) -Methode, die die Zeichenfolge mit dem angegebenen stringBuffer vergleicht.
Hier ist ein einfaches Java-Programm, das die Funktionsweise von
demonstriert equals() Methode. Beachten Sie, dass wir nicht anrufen sollten equals() auf eine leere Zeichenfolge, da dies zu a führt NullPointerException.
classMain { publicstaticvoid main(String[]args) { Strings1=newString("Compare two strings in Java"); Strings2=new String("Compare two strings in Java"); System.out.println(s1!=null&&s1.equals(s2)); // Wird als wahr ausgewertet } } |
Herunterladen Code ausführen
3. Verwenden Objects.equals() Methode
Java 7 führte die ein Object -Klasse, die aus mehreren statischen Hilfsmethoden zum Bearbeiten eines Objekts besteht. Es hat die equals() -Methode, die einen booleschen Wert zurückgibt, der bestimmt, ob die Argumente gleich sind oder nicht.
im Gegensatz zu den equals() Methode der String Klasse, es verarbeitet Nullen elegant und wirft kein a NullPointerException, wie unten gezeigt:
importjava.util.Objects; classMain { publicstaticvoid main(String[]args) { Strings1=newString("Compare two strings in Java"); Strings2=new String("Compare two strings in Java"); System.out.println(Objects.equals(s1, s2)); // Wird als wahr ausgewertet System.out.println(Objects.equals(null, null));// Wird als wahr ausgewertet System.out.println(Objects.equals(null, s2)); // Wird als falsch ausgewertet System.out.println(Objects.equals(s1, null)); // Wird als falsch ausgewertet } } |
Herunterladen Code ausführen
4. Verwenden String.compareTo() Methode
String Klasse bietet auch die compareTo() Methode, die zwei Strings lexikografisch vergleicht, dh Zeichen für Zeichen basierend auf der Wörterbuchreihenfolge. Es gibt 0 zurück, wenn die Zeichenfolge gleich dem Argument ist. Andernfalls wird die Differenz zwischen den beiden Zeichenwerten zurückgegeben, die am ersten nicht übereinstimmenden Index vorhanden sind.
Das String Klasse bietet auch die compareToIgnoreCase() Methode, die ähnlich ist compareTo() -Methode, ignoriert jedoch die Groß-/Kleinschreibung beider Strings. Wie equals() Methode der String Klasse, das sollte man nicht nennen compareTo() -Methode auf eine leere Zeichenfolge, da dies zu a führt NullPointerException.
Hier ist ein kurzes Java-Programm, um die Funktionsweise von zu demonstrieren compareTo() Methode:
classMain { publicstaticvoid main(String[]args) { Strings1=newString("Compare two strings in Java"); Strings2=new String("Compare two strings in Java"); // Wird als wahr ausgewertet System.out.println(s1!=null&&s1.compareTo(s2)==0); } } |
Herunterladen Code ausführen
5. Verwenden von Apache Commons Lang
Die Apache Commons StringUtils Die Klasse stellt mehrere statische Hilfsmethoden für den Zeichenfolgenvergleich bereit. Das equals() und compare() Methode von StringUtils Klasse ist eine erweiterte Version der equals() und compareTo() Methode von String -Klasse, die auch Nullwerte behandelt.
StringUtils Klasse hat auch equalsIgnoreCase() und compareIgnoreCase() Methode, die der ähnlich sind equals() und compare() -Methode, außer dass sie die Groß-/Kleinschreibung beider Strings ignorieren.
importorg.apache.commons.lang3.StringUtils; classMain { publicstaticvoidmain(String[]args) { Strings1=newString("Compare two strings in Java"); Strings2=new String("Compare two strings in Java"); // Wird als wahr ausgewertet System.out.println(StringUtils.equals(s1, s2)); // Wird als wahr ausgewertet System.out.println(StringUtils.compare(s1, s2)==0); } } |
Code herunterladen
Das ist alles über den Vergleich zweier Strings in Java.
Danke fürs Lesen.
Bitte nutzen Sie unsere Online-Compiler um Code in Kommentaren mit C, C++, Java, Python, JavaScript, C#, PHP und vielen weiteren gängigen Programmiersprachen zu posten.
Wie wir? Empfehlen Sie uns Ihren Freunden und helfen Sie uns zu wachsen. Viel Spaß beim Codieren 🙂