Come confrontare due stringhe in Java

⚡ Riepilogo intelligente

Confrontare due stringhe in Java È possibile farlo con diversi metodi che confrontano una sequenza di caratteri per verificarne l'uguaglianza o l'ordine. Questa risorsa illustra sette approcci, tra cui String equals, Objects equals, compareTo, i metodi di StringUtils, l'operatore == e un metodo di confronto personalizzato, ciascuno con esempi.

  • 🟰 String equals(): Confronta due valori stringa per verificarne l'uguaglianza, distinguendo tra maiuscole e minuscole, e restituisce true o false.
  • 📦 Oggetti equals(): Confronta in modo sicuro due stringhe, trattando due valori nulli come uguali.
  • 🔤 compareTo(): Confronta le stringhe in ordine lessicografico, restituendo zero, un numero negativo o un numero positivo.
  • 🧰 Metodi di StringUtils: Le funzioni equals() e equalsAny() di Apache Commons confrontano le stringhe e gestiscono i valori null in modo appropriato.
  • ⚠️ == Operare: Confronta i riferimenti agli oggetti, non il loro contenuto, quindi non dovrebbe essere utilizzato per il confronto di valori.

Come confrontare due stringhe in Java

Metodi per confrontare stringhe in Java

Java fornisce diversi metodi che è possibile sfruttare per confrontare due stringhe Java. Confronto tra stringhe in Java è una funzionalità che abbina una sequenza di caratteri a una stringa.

Per imparare a confrontare le stringhe in JavaÈ possibile utilizzare i metodi forniti dalle seguenti classi:

  • Classe String del pacchetto java.lang.
  • Classe Objects del pacchetto java.util.
  • Classe StringUtils dal pacchetto org.apache.commons.lang3.

Molti di questi Java I metodi di confronto tra stringhe offrono soluzioni per ignorare la distinzione tra maiuscole e minuscole. In questo tutorial, imparerai i diversi metodi che puoi utilizzare per confrontare due stringhe.

Metodo 1: metodo String equals()

Migliori Java Corda metodo equals() confronta due oggetti stringa per valori stringa uguali.

Sintassi:

public boolean equals(Object anObject)

parametri del metodo equals():

anObject – La stringa dell'argomento per confrontare le stringhe.

tipi restituiti dal metodo equals()

  • Restituisce vero se la stringa letterale fornita è la stessa della prima stringa.
  • Restituisce falso se la prima stringa non è la stessa stringa dell'argomento.

Esempio:

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

Uscita prevista:

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

Spiegazione:

  • Hai ottenuto false nell'ultimo output perché l'oggetto specificato ha un caso diverso.

Nota: Utilizza il metodo equals() della classe String per confrontare stringhe distinguendo tra maiuscole e minuscole. Utilizza il metodo "equalsIgnoreCase" per confrontare oggetti stringa ignorando la distinzione tra maiuscole e minuscole.

Metodo 2: metodo Oggetti equals()

Migliori Java Oggetti uguali() Il metodo confronta due oggetti stringa per verificare se hanno gli stessi valori.

Sintassi:

public static boolean equals(Object a, Object b)

parametri del metodo equals()

a – Stringa di argomento per il primo oggetto stringa.

b – Stringa di argomento per il secondo oggetto stringa.

tipi restituiti dal metodo equals()

  • Restituisce vero se i valori letterali della stringa sono uguali. Anche il passaggio di un valore nullo nei due argomenti restituirà true.
  • Restituisce false se i valori letterali della stringa non sono uguali.

Esempio:

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

Produzione:

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

Spiegazione:

Da questo esempio si può notare che l'output è un valore booleano true, poiché le stringhe confrontate sono uguali.

Metodo 3: metodo String compareTo()

Migliori Java Stringa confrontaTo() metodo confronta due stringhe in ordine alfabetico. Di solito è definito ordine lessicografico.

Sintassi:

public int compareTo(String str)

parametri del metodo compareTo()

str – La stringa da confrontare con la stringa corrente.

Il metodo compareTo() restituisce

  • 0 – Restituisce zero se l'oggetto specificato è uguale alla stringa corrente.
  • < 0 – Restituisce un numero inferiore a zero se questa stringa è inferiore all'oggetto specificato.
  • > 0 – Restituisce un numero maggiore di zero se questa stringa supera la stringa fornita.

Esempio:

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

Uscita prevista:

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

Spiegazione:

Il primo risultato restituisce un valore pari a zero, poiché la prima e la seconda stringa sono uguali.

Il secondo risultato restituisce un valore di trentadue, poiché i caratteri sono diversi.

Nota: Per ignorare la distinzione tra maiuscole e minuscole, è possibile utilizzare il metodo “compareToIgnoreCase”.

Metodo 4: metodo StringUtils equals()

Migliori Java StringUtils è uguale a() metodo confronta l'uguaglianza di due sequenze di caratteri.

Assicurati di aver aggiunto la libreria "org.apache.commons.lang3" al tuo programma. Questo ti permetterà di confrontare le stringhe utilizzando i metodi di StringUtils.

Per i progetti Maven, usa questo guida per aggiungere la libreria al progetto.

Tuttavia, se vuoi aggiungere la libreria senza alcuno strumento di compilazione, usa questo guida.

Sintassi:

public static boolean equals(CharSequence cs1, CharSequence cs2)

Parametri del metodo StringUtils equals()

  • cs1 – Una sequenza di caratteri per il primo argomento.
  • cs2 – Una sequenza di caratteri per il secondo argomento.

Il metodo StringUtils equals() restituisce

  • Restituisce true se il confronto tra le stringhe è uguale. Questo vale anche se si passa un valore nullo in entrambi gli argomenti.
  • Restituisce falso se il confronto tra stringhe non è uguale.

Esempio:

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

Produzione:

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

Spiegazione:

Poiché il contenuto della prima e della seconda stringa è uguale, il risultato restituisce true.

È possibile utilizzare il metodo "equalsIgnoreCase" per ignorare il caso.

Metodo 5: metodo StringUtils equalsAny()

Migliori Java StringUtils è uguale ad Any() Il metodo controlla se esiste una stringa negli argomenti.

Sintassi:

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

Parametri del metodo StringUtils equalsAny()

  • string – Il valore stringa per il primo argomento. L'argomento può anche avere un valore null.
  • searchStrings – Un insieme di argomenti stringa affinché il metodo possa verificare se è presente la stringa del primo argomento.

Il metodo StringUtils equalsAny() restituisce

  • Restituisce true se la stringa da confrontare esiste nel numero variabile di stringhe di ricerca. Questo vale anche se entrambi gli argomenti sono null.
  • Restituisce falso se la stringa da trovare non corrisponde ad alcuna stringa nel numero variabile di stringhe di ricerca.

Esempio:

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

Produzione:

is Guru99 available: true
is GURU99 available: false

Spiegazione:

Poiché il contenuto della prima stringa e della seconda stringa sono uguali, il risultato restituisce true. È possibile utilizzare il metodo "equalsAnyIgnoreCase" per ignorare il caso.

Metodo 6: utilizzo dell'operatore ==

L'operatore == sulle stringhe controlla se i riferimenti agli oggetti hanno lo stesso indirizzo.

Esempio:

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

Uscita prevista:

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

Spiegazione:

  • Il primo risultato restituisce un valore booleano true. Le stringhe con lo stesso contenuto vengono aggiunte allo stesso pool di stringhe, pertanto condividono un unico indirizzo.
  • Il secondo risultato restituisce un valore booleano false. Gli oggetti hanno contenuti diversi, il che si traduce in pool di stringhe diversi. Questo significa che le stringhe hanno riferimenti a oggetti separati; pertanto l'output è false.

Metodo 7: creazione di un metodo personalizzato per confrontare due stringhe Java

Creare un metodo che confronti due stringhe utilizzando l'ordine lessicografico.

Sintassi:

public static int compareTwoStrings(String str1, String str2)

Parametri del metodo personalizzato

  • str1 – La stringa da confrontare.
  • str2 – La stringa con cui confrontare.

Restituzioni del metodo personalizzato

  • 0 – Restituisce zero se la prima stringa è uguale alla seconda stringa.
  • < 0 – Restituisce un numero inferiore a zero se la prima stringa è inferiore alla seconda stringa.
  • > 0 – Restituisce un numero maggiore di zero se la prima stringa è maggiore della seconda stringa.

Esempio:

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

Uscita prevista:

is Guru99 equal to Guru99: 0

Spiegazione:

Il risultato ha restituito un valore pari a zero, il che significa che la funzione personalizzata funziona come previsto.

DOMANDE FREQUENTI

Sì. Gli assistenti basati sull'IA possono suggerire equals, compareTo o StringUtils in base al tuo obiettivo e segnalare l'errore comune di ==. Dovresti comunque confermare la scelta con dei test sui tuoi dati specifici.

Sì. Gli strumenti di intelligenza artificiale rilevano l'uso improprio di == per il confronto di contenuti e suggeriscono invece equals o equalsIgnoreCase. Questo aiuta a ridurre i piccoli errori di uguaglianza, comuni per chi è alle prime armi con le stringhe.

L'operatore == confronta i riferimenti agli oggetti, non il loro contenuto. Due stringhe con lo stesso valore possono avere riferimenti diversi, quindi == potrebbe restituire false. Per un confronto affidabile dei valori, utilizzare equals().

Il metodo equals() è sensibile alle maiuscole e minuscole, quindi “Guru"99" e "GURU99" non sono uguali. Il metodo equalsIgnoreCase() confronta le stringhe ignorando le differenze tra maiuscole e minuscole, restituendo true per entrambe.

Riassumi questo post con: