Πώς να συγκρίνετε δύο συμβολοσειρές σε Java

⚡ Έξυπνη Σύνοψη

Σύγκριση δύο συμβολοσειρών σε Java μπορεί να γίνει με διάφορες μεθόδους που ταιριάζουν με μια ακολουθία χαρακτήρων για ισότητα ή τάξη. Αυτός ο πόρος εξηγεί επτά προσεγγίσεις, συμπεριλαμβανομένων των μεθόδων String equals, Objects equals, compareTo, StringUtils, τον τελεστή == και μια προσαρμοσμένη μέθοδο σύγκρισης, καθεμία με παραδείγματα.

  • 🟰 Η συμβολοσειρά ισούται με(): Συγκρίνει δύο τιμές συμβολοσειράς για ισότητα πεζών-κεφαλαίων, επιστρέφοντας true ή false.
  • 📦 Αντικείμενα ίσον(): Συγκρίνει με ασφάλεια δύο συμβολοσειρές, αντιμετωπίζοντας δύο τιμές null ως ίσες.
  • 🔤 σύγκρισηΣε(): Συγκρίνει συμβολοσειρές με λεξικογραφική σειρά, επιστρέφοντας μηδέν, έναν αρνητικό ή έναν θετικό αριθμό.
  • 🧰 Μέθοδοι StringUtils: Οι συναρτήσεις equals() και equalsAny() από το Apache Commons συγκρίνουν συμβολοσειρές και χειρίζονται τα null με ομαλό τρόπο.
  • ⚠️ == Operaβραχώδης κορυφή: Συγκρίνει αναφορές αντικειμένων, όχι περιεχόμενα, επομένως δεν θα πρέπει να χρησιμοποιείται για σύγκριση τιμών.

Πώς να συγκρίνετε δύο συμβολοσειρές σε Java

Μέθοδοι σύγκρισης συμβολοσειρών σε Java

Java παρέχει διαφορετικές μεθόδους που μπορείτε να αξιοποιήσετε για να συγκρίνετε δύο συμβολοσειρές Java. Σύγκριση χορδών σε Java είναι ένα χαρακτηριστικό που αντιστοιχίζει μια ακολουθία χαρακτήρων σε μια συμβολοσειρά.

Για να μάθετε πώς να συγκρίνετε χορδές σε Java, μπορείτε να χρησιμοποιήσετε τις μεθόδους που παρέχονται από τις ακόλουθες κλάσεις:

  • Κλάση συμβολοσειράς από το πακέτο java.lang.
  • Κλάση αντικειμένων από το πακέτο java.util.
  • Κλάση StringUtils από το πακέτο org.apache.commons.lang3.

Τα περισσότερα από αυτά Java Οι μέθοδοι compare-strings έχουν λύσεις για την αγνόηση της πεζής ή ...

Μέθοδος 1: Μέθοδος String equals().

The Java Σπάγγος μέθοδος equals(). συγκρίνει δύο αντικείμενα συμβολοσειράς για ίσες τιμές συμβολοσειράς.

Σύνταξη:

public boolean equals(Object anObject)

παράμετροι μεθόδου equals():

anObject – Η συμβολοσειρά ορίσματος για τη σύγκριση συμβολοσειρών.

τύπους επιστροφής μεθόδου equals().

  • Επιστρέφει true αν η κυριολεκτική συμβολοσειρά που παρέχεται είναι ίδια με την πρώτη συμβολοσειρά.
  • Επιστρέφει το false εάν η πρώτη συμβολοσειρά δεν είναι ίδια με τη συμβολοσειρά ορίσματος.

Παράδειγμα:

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));
  }
}

Αναμενόμενη παραγωγή:

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

Επεξήγηση:

  • Λάβατε false στην τελευταία έξοδο επειδή το καθορισμένο αντικείμενο έχει διαφορετική περίπτωση.

Σημείωση: Χρησιμοποιήστε τη μέθοδο string equals() για σύγκριση συμβολοσειρών με διάκριση πεζών-κεφαλαίων. Χρησιμοποιήστε τη μέθοδο “equalsIgnoreCase” για να συγκρίνετε αντικείμενα συμβολοσειράς αγνοώντας την πεζά-κεφαλαία.

Μέθοδος 2: Μέθοδος Objects equals().

The Java Αντικείμενα ίσον() μέθοδος συγκρίνει δύο αντικείμενα συμβολοσειρών για να βρει αν έχουν τις ίδιες τιμές.

Σύνταξη:

public static boolean equals(Object a, Object b)

τις παραμέτρους της μεθόδου equals().

a – Συμβολοσειρά ορίσματος για το αντικείμενο πρώτης συμβολοσειράς.

β – Συμβολοσειρά ορίσματος για το αντικείμενο δεύτερης συμβολοσειράς.

τύπους επιστροφής μεθόδου equals().

  • Επιστρέφει true αν τα κυριολεκτικά της συμβολοσειράς είναι ίσα. Η μετάδοση μιας μηδενικής τιμής στα δύο ορίσματα θα επιστρέψει επίσης true.
  • Επιστρέφει το false αν τα γράμματα της συμβολοσειράς δεν είναι ίσα.

Παράδειγμα:

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));
    }
}

Παραγωγή:

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

Επεξήγηση:

Από αυτό το παράδειγμα, μπορείτε να δείτε ότι η έξοδος είναι μια λογική τιμή true, καθώς οι συμβολοσειρές που συγκρίνονται είναι ίσες.

Μέθοδος 3: Μέθοδος string compareTo().

The Java Συμβολοσειρά compareTo() μέθοδος συγκρίνει δύο συμβολοσειρές με αλφαβητική σειρά. Συνήθως αναφέρεται ως λεξικογραφική σειρά.

Σύνταξη:

public int compareTo(String str)

παραμέτρους της μεθόδου compareTo().

str – Η συμβολοσειρά για σύγκριση με την τρέχουσα συμβολοσειρά.

επιστρέφει η μέθοδος compareTo().

  • 0 – Επιστρέφει μηδέν εάν το καθορισμένο αντικείμενο είναι ίσο με την τρέχουσα συμβολοσειρά.
  • < 0 – Επιστρέφει έναν αριθμό μικρότερο από το μηδέν εάν αυτή η συμβολοσειρά είναι μικρότερη από το καθορισμένο αντικείμενο.
  • > 0 – Επιστρέφει έναν αριθμό μεγαλύτερο από το μηδέν εάν αυτή η συμβολοσειρά υπερβαίνει την παρεχόμενη συμβολοσειρά.

Παράδειγμα:

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));
    }
}

Αναμενόμενη παραγωγή:

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

Επεξήγηση:

Το πρώτο αποτέλεσμα επιστρέφει τιμή μηδέν, καθώς η πρώτη και η δεύτερη συμβολοσειρά είναι ίσες.

Το δεύτερο αποτέλεσμα επιστρέφει την τιμή τριάντα δύο, καθώς οι χαρακτήρες είναι διαφορετικοί.

Σημείωση: Για να αγνοήσετε την περίπτωση πεζών-κεφαλαίων, μπορείτε να χρησιμοποιήσετε τη μέθοδο "compareToIgnoreCase".

Μέθοδος 4: Μέθοδος StringUtils equals().

The Java StringUtils ίσον() μέθοδος συγκρίνει την ισότητα δύο ακολουθιών χαρακτήρων.

Βεβαιωθείτε ότι έχετε προσθέσει τη βιβλιοθήκη «org.apache.commons.lang3» στο πρόγραμμά σας. Αυτό θα σας επιτρέψει να συγκρίνετε συμβολοσειρές χρησιμοποιώντας τις μεθόδους StringUtils.

Για έργα Maven, χρησιμοποιήστε αυτό καθοδηγήσει για να προσθέσετε τη βιβλιοθήκη στο έργο.

Ωστόσο, αν θέλετε να προσθέσετε τη βιβλιοθήκη χωρίς εργαλεία δημιουργίας, χρησιμοποιήστε αυτό καθοδηγήσει.

Σύνταξη:

public static boolean equals(CharSequence cs1, CharSequence cs2)

StringUtils ισοδυναμεί με παραμέτρους μεθόδου

  • cs1 – Μια ακολουθία χαρακτήρων για το πρώτο όρισμα.
  • cs2 – Μια ακολουθία χαρακτήρων για το δεύτερο όρισμα.

Η μέθοδος StringUtils equals() επιστρέφει

  • Επιστρέφει true εάν η σύγκριση συμβολοσειρών είναι ίση. Ισχύει επίσης εάν περάσετε μια τιμή null στα δύο ορίσματα.
  • Επιστρέφει το false εάν η σύγκριση συμβολοσειρών δεν είναι ίση.

Παράδειγμα:

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));
    }
}

Παραγωγή:

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

Επεξήγηση:

Εφόσον τα περιεχόμενα της πρώτης και της δεύτερης συμβολοσειράς είναι ίσα, το αποτέλεσμα επιστρέφει true.

Μπορείτε να χρησιμοποιήσετε τη μέθοδο "equalsIgnoreCase" για να αγνοήσετε την περίπτωση.

Μέθοδος 5: Μέθοδος StringUtils equalsAny().

The Java StringUtils ίσονAny() Η μέθοδος ελέγχει εάν υπάρχει μια συμβολοσειρά στα ορίσματα.

Σύνταξη:

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

StringUtils ισοδυναμεί με παραμέτρους μεθόδου Any().

  • string – Η τιμή συμβολοσειράς για το πρώτο όρισμα. Το όρισμα μπορεί επίσης να έχει μηδενική τιμή.
  • SearchStrings – Ένα σύνολο ορισμάτων συμβολοσειράς για τη μέθοδο για να βρει εάν υπάρχει η πρώτη συμβολοσειρά ορίσματος.

Η μέθοδος StringUtils equalsAny() επιστρέφει

  • Επιστρέφει την τιμή true εάν η συμβολοσειρά που πρέπει να αντιστοιχιστεί υπάρχει στη μεταβλητή αριθμός συμβολοσειρών αναζήτησης. Αυτό ισχύει εάν και τα δύο ορίσματα είναι null.
  • Επιστρέφει το false εάν η συμβολοσειρά που ταιριάζει δεν ταιριάζει με καμία συμβολοσειρά στον μεταβλητό αριθμό των συμβολοσειρών αναζήτησης.

Παράδειγμα:

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));
    }
}

Παραγωγή:

is Guru99 available: true
is GURU99 available: false

Επεξήγηση:

Εφόσον τα περιεχόμενα της πρώτης συμβολοσειράς και της δεύτερης συμβολοσειράς είναι ίσα, το αποτέλεσμα επιστρέφει true. Μπορείτε να χρησιμοποιήσετε τη μέθοδο "equalsAnyIgnoreCase" για να αγνοήσετε την περίπτωση.

Μέθοδος 6: Χρήση τελεστή ==

Ο τελεστής == στις συμβολοσειρές ελέγχει εάν οι αναφορές αντικειμένων έχουν την ίδια διεύθυνση.

Παράδειγμα:

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));
    }
}

Αναμενόμενη παραγωγή:

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

Επεξήγηση:

  • Το πρώτο αποτέλεσμα επιστρέφει μια λογική τιμή true. Συμβολοσειρές με το ίδιο περιεχόμενο προστίθενται στην ίδια ομάδα συμβολοσειρών, επομένως οι συμβολοσειρές μοιράζονται μία διεύθυνση.
  • Το δεύτερο αποτέλεσμα επιστρέφει μια λογική τιμή false. Τα αντικείμενα έχουν διαφορετικό περιεχόμενο, το οποίο έχει ως αποτέλεσμα διαφορετικές ομάδες συμβολοσειρών. Αυτό σημαίνει ότι οι συμβολοσειρές έχουν ξεχωριστές αναφορές αντικειμένων. Επομένως, η έξοδος είναι false.

Μέθοδος 7: Δημιουργία προσαρμοσμένης μεθόδου σύγκρισης δύο συμβολοσειρών Java

Δημιουργήστε μια μέθοδο που συγκρίνει δύο συμβολοσειρές χρησιμοποιώντας λεξικογραφική σειρά.

Σύνταξη:

public static int compareTwoStrings(String str1, String str2)

Προσαρμοσμένες παράμετροι μεθόδου

  • str1 – Η συμβολοσειρά προς σύγκριση.
  • str2 – Η συμβολοσειρά προς σύγκριση.

Η προσαρμοσμένη μέθοδος επιστρέφει

  • 0 – Επιστρέφει μηδέν εάν η πρώτη συμβολοσειρά είναι ίση με τη δεύτερη συμβολοσειρά.
  • < 0 – Επιστρέφει έναν αριθμό μικρότερο από το μηδέν εάν η πρώτη συμβολοσειρά είναι μικρότερη από τη δεύτερη συμβολοσειρά.
  • > 0 – Επιστρέφει έναν αριθμό μεγαλύτερο από το μηδέν εάν η πρώτη συμβολοσειρά είναι μεγαλύτερη από τη δεύτερη συμβολοσειρά.

Παράδειγμα:

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));
    }
}

Αναμενόμενη παραγωγή:

is Guru99 equal to Guru99: 0

Επεξήγηση:

Το αποτέλεσμα επέστρεψε μια τιμή μηδέν, που σημαίνει ότι η προσαρμοσμένη συνάρτηση λειτουργεί όπως αναμένεται.

Συχνές Ερωτήσεις

Ναι. Οι βοηθοί τεχνητής νοημοσύνης μπορούν να προτείνουν equals, compareTo ή StringUtils με βάση τον στόχο σας και να επισημάνουν την κοινή == παγίδα. Θα πρέπει να επιβεβαιώσετε την επιλογή με δοκιμές για τα συγκεκριμένα δεδομένα σας.

Ναι. Τα εργαλεία τεχνητής νοημοσύνης ανιχνεύουν την κακή χρήση του == για τη σύγκριση περιεχομένου και προτείνουν αντ' αυτού τη χρήση του equals ή equalsIgnoreCase. Αυτό βοηθά στη μείωση των ανεπαίσθητων σφαλμάτων ισότητας που είναι συνηθισμένα για αρχάριους που εργάζονται με συμβολοσειρές.

Ο τελεστής == συγκρίνει αναφορές αντικειμένων, όχι περιεχόμενα. Δύο συμβολοσειρές με την ίδια τιμή μπορεί να έχουν διαφορετικές αναφορές, επομένως η == μπορεί να επιστρέψει false. Χρησιμοποιήστε την equals() για αξιόπιστη σύγκριση τιμών.

Η μέθοδος equals() κάνει διάκριση πεζών-κεφαλαίων, επομένως "GuruΤα 99” και “GURU99” δεν είναι ίσα. Η μέθοδος equalsIgnoreCase() συγκρίνει τις συμβολοσειρές αγνοώντας τις διαφορές μεταξύ κεφαλαίων και πεζών γραμμάτων, επιστρέφοντας true και για τις δύο.

Συνοψίστε αυτήν την ανάρτηση με: