Sådan sammenlignes to strenge i Java

⚡ Smart opsummering

Sammenligning af to strenge i Java kan gøres med flere metoder, der matcher en sekvens af tegn for lighed eller rækkefølge. Denne ressource forklarer syv tilgange, herunder String equals, Objects equals, compareTo, StringUtils-metoder, ==-operatoren og en brugerdefineret sammenligningsmetode, hver med eksempler.

  • 🟰 Strengen er lig med(): Sammenligner to strengværdier for at identificere lighed mellem store og små bogstaver og returnerer sand eller falsk.
  • 📦 Objekter er lig med(): Sammenligner sikkert to strenge og behandler to nulværdier som lige store.
  • 🔤 sammenlignTil(): Sammenligner strenge i leksikografisk rækkefølge og returnerer nul, et negativt eller et positivt tal.
  • 🧰 StringUtils-metoder: equals() og equalsAny() fra Apache Commons sammenligner strenge og håndterer nuller uden problemer.
  • ⚠️ == Operator: Sammenligner objektreferencer, ikke indhold, så den bør ikke bruges til værdisammenligning.

Sådan sammenlignes to strenge i Java

Metoder til at sammenligne strenge i Java

Java giver forskellige metoder, du kan bruge til at sammenligne to strenge i Java. Strengesammenligning i Java er en funktion, der matcher en sekvens af tegn til en streng.

For at lære at sammenligne strenge i Java, kan du bruge metoderne fra følgende klasser:

  • Stringklasse fra java.lang-pakken.
  • Objektklassen fra java.util-pakken.
  • StringUtils-klassen fra org.apache.commons.lang3-pakken.

De fleste af disse Java Metoder til sammenligning af strenge har løsninger til at ignorere store og små bogstaver. I denne vejledning lærer du de forskellige metoder, du kan bruge til at sammenligne to strenge.

Metode 1: Streng lig med() metode

Java String equals() metode sammenligner to strengobjekter for lige store strengværdier.

Syntaks:

public boolean equals(Object anObject)

equals() metodeparametre:

anObject – Argumentstrengen til sammenligning af strenge.

equals() metode returtyper

  • Returnerer sand, hvis den angivne strengliteral er den samme som den første streng.
  • Returnerer falsk, hvis den første streng ikke er den samme som argumentstrengen.

Eksempel:

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

Forventet output:

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

Forklaring:

  • Du fik falsk i det sidste output, fordi det angivne objekt har en anden store og små bogstaver.

Bemærk: Brug string equals()-metoden til at sammenligne strenge med forskel på store og små bogstaver. Brug "equalsIgnoreCase"-metoden til at sammenligne strengobjekter, mens store og små bogstaver ignoreres.

Metode 2: Objekter er lig med() metode

Java Objekter er lig med() metoden sammenligner to strengobjekter for at finde ud af, om de har de samme værdier.

Syntaks:

public static boolean equals(Object a, Object b)

equals() metodeparametre

a – Argumentstreng for det første strengobjekt.

b – Argumentstreng for det andet strengobjekt.

equals() metode returtyper

  • Returnerer sand, hvis strengens literaler er ens. Hvis du sender en nulværdi i de to argumenter, vil det også returnere sand.
  • Returnerer falsk, hvis strengens literaler ikke er ens.

Eksempel:

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

Output:

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

Forklaring:

Fra dette eksempel kan du se, at outputtet er en boolsk værdi af sand, da de sammenlignede strenge er ens.

Metode 3: String compareTo() metode

Java String compareTo() metoden sammenligner to strenge i alfabetisk rækkefølge. Det omtales normalt som leksikografisk orden.

Syntaks:

public int compareTo(String str)

compareTo() metodeparametre

str – Den streng, der skal sammenlignes med den aktuelle streng.

compareTo() metoden returnerer

  • 0 – Returnerer nul, hvis det angivne objekt er lig med den aktuelle streng.
  • < 0 – Returnerer et tal mindre end nul, hvis denne streng er mindre end det angivne objekt.
  • > 0 – Returnerer et tal større end nul, hvis denne streng overstiger den angivne streng.

Eksempel:

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

Forventet output:

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

Forklaring:

Det første resultat returnerer værdien nul, da den første og anden streng er ens.

Det andet resultat returnerer værdien 32, da tegnene er forskellige.

Bemærk: For at ignorere store og små bogstaver kan du bruge metoden "compareToIgnoreCase".

Metode 4: StringUtils equals() metode

Java StringUtils er lig med() metoden sammenligner ligheden mellem to sekvenser af tegn.

Sørg for at du har tilføjet biblioteket "org.apache.commons.lang3" i dit program. Dette giver dig mulighed for at sammenligne strenge ved hjælp af StringUtils-metoderne.

Brug dette til Maven-projekter vejlede at tilføje biblioteket til projektet.

Hvis du dog vil tilføje biblioteket uden byggeværktøjer, skal du bruge dette vejlede.

Syntaks:

public static boolean equals(CharSequence cs1, CharSequence cs2)

StringUtils equals() metodeparametre

  • cs1 – En sekvens af tegn til det første argument.
  • cs2 – En sekvens af tegn til det andet argument.

StringUtils equals() metode returnerer

  • Returnerer sand, hvis strengsammenligningen er ens. Det gælder også, hvis du angiver en nullværdi i de to argumenter.
  • Returnerer falsk, hvis strengsammenligningen ikke er ens.

Eksempel:

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

Output:

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

Forklaring:

Da indholdet af den første og anden streng er ens, returnerer resultatet sandt.

Du kan bruge metoden "equalsIgnoreCase" til at ignorere sagen.

Metode 5: StringUtils equalsAny() metode

Java StringUtils equalsAny() metoden kontrollerer, om der findes en streng i argumenterne.

Syntaks:

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

StringUtils equalsAny() metodeparametre

  • streng – strengværdien for det første argument. Argumentet kan også have en nulværdi.
  • searchStrings – Et sæt strengargumenter for metoden til at finde, om den første argumentstreng er til stede.

StringUtils equalsAny() metode returnerer

  • Returnerer sand, hvis den streng, der skal matches, findes i variablen antal søgestrenge. Dette gælder, hvis begge argumenter er null.
  • Returnerer falsk, hvis den streng, der skal matches, ikke matcher nogen streng i det variable antal søgestrenge.

Eksempel:

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

Output:

is Guru99 available: true
is GURU99 available: false

Forklaring:

Da indholdet af den første streng og den anden streng er ens, returnerer resultatet sandt. Du kan bruge metoden "equalsAnyIgnoreCase" til at ignorere sagen.

Metode 6: Brug af == operator

Operatoren == på strenge kontrollerer, om objektreferencer har samme adresse.

Eksempel:

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

Forventet output:

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

Forklaring:

  • Det første resultat returnerer en boolsk værdi på sand. Strenge med samme indhold tilføjes til den samme strengpulje, derfor deler strengene én adresse.
  • Det andet resultat returnerer en boolsk værdi på falsk. Objekterne har forskelligt indhold, hvilket resulterer i forskellige strengpuljer. Det betyder, at strengene har separate objektreferencer; outputtet er derfor falsk.

Metode 7: Oprettelse af en brugerdefineret metode til at sammenligne to strenge i Java

Opret en metode, der sammenligner to strenge ved hjælp af leksikografisk rækkefølge.

Syntaks:

public static int compareTwoStrings(String str1, String str2)

Brugerdefinerede metodeparametre

  • str1 – Strengen der skal sammenlignes.
  • str2 – Den streng, der skal sammenlignes med.

Tilpasset metode returnerer

  • 0 – Returnerer nul, hvis den første streng er lig med den anden streng.
  • < 0 – Returnerer et tal mindre end nul, hvis den første streng er mindre end den anden streng.
  • > 0 – Returnerer et tal større end nul, hvis den første streng er større end den anden streng.

Eksempel:

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

Forventet output:

is Guru99 equal to Guru99: 0

Forklaring:

Resultatet returnerede en værdi på nul, hvilket betyder, at den brugerdefinerede funktion fungerer som forventet.

Ofte Stillede Spørgsmål

Ja. AI-assistenter kan anbefale equals, compareTo eller StringUtils baseret på dit mål og markere den almindelige ==-faldgrube. Du bør stadig bekræfte valget med tests for dine specifikke data.

Ja. AI-værktøjer registrerer misbrug af == til indholdssammenligning og foreslår i stedet equals eller equalsIgnoreCase. Dette hjælper med at reducere subtile lighedsfejl, der er almindelige for begyndere, der arbejder med strenge.

Operatoren == sammenligner objektreferencer, ikke indhold. To strenge med samme værdi kan have forskellige referencer, så == kan returnere falsk. Brug equals() til pålidelig værdisammenligning.

equals()-metoden skelner mellem store og små bogstaver, så “Guru"99" og "GURU99" er ikke ens. Metoden equalsIgnoreCase() sammenligner strenge, mens den ignorerer forskelle mellem store og små bogstaver, og returnerer sand for begge.

Opsummer dette indlæg med: