Hur man jämför två strängar i Java

⚡ Smart sammanfattning

Jämförelse av två strängar i Java kan göras med flera metoder som matchar en sekvens av tecken för likhet eller ordning. Den här resursen förklarar sju metoder, inklusive String equals, Objects equals, compareTo, StringUtils-metoder, operatorn == och en anpassad jämförelsemetod, var och en med exempel.

  • 🟰 Strängen är lika med (): Jämför två strängvärden för skiftlägeskänslig likhet, och returnerar sant eller falskt.
  • 📦 Objekt är lika med(): Jämför säkert två strängar och behandlar två nullvärden som lika.
  • 🔤 jämförTill(): Jämför strängar i lexikografisk ordning och returnerar noll, ett negativt eller ett positivt tal.
  • 🧰 StringUtils-metoder: equals() och equalsAny() från Apache Commons jämför strängar och hanterar nullvärden smidigt.
  • ⚠️ == Operator: Jämför objektreferenser, inte innehåll, så den bör inte användas för värdejämförelse.

Hur man jämför två strängar i Java

Metoder för att jämföra strängar i Java

Java ger olika metoder som du kan använda för att jämföra två strängar i Java. Strängjämförelse i Java är en funktion som matchar en sekvens av tecken till en sträng.

För att lära dig hur man jämför strängar i Java, kan du använda metoderna som tillhandahålls av följande klasser:

  • Strängklass från java.lang-paketet.
  • Objektklassen från java.util-paketet.
  • StringUtils-klassen från org.apache.commons.lang3-paketet.

De flesta av dessa Java Metoder för jämförelse av strängar har lösningar för att ignorera gemener och skiftläge. I den här handledningen lär du dig de olika metoder du kan använda för att jämföra två strängar.

Metod 1: String equals()-metoden

Ocuco-landskapet Java Sträng metoden equals(). jämför två strängobjekt för lika strängvärden.

Syntax:

public boolean equals(Object anObject)

equals() metodparametrar:

anObject – Argumentsträngen för att jämföra strängar.

return typer av metoden equals().

  • Returnerar sant om den angivna strängen är densamma som den första strängen.
  • Returnerar false om den första strängen inte är densamma som argumentsträngen.

Exempel:

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

Förväntad produktion:

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

Förklaring:

  • Du fick false i den senaste utgången eftersom det angivna objektet har ett annat skiftläge.

Obs: Använd metoden string equals() för skiftlägeskänslig strängjämförelse. Använd metoden ”equalsIgnoreCase” för att jämföra strängobjekt utan att skiftläge används.

Metod 2: Metoden Objects equals()

Ocuco-landskapet Java Objekt är lika med() metod jämför två strängobjekt för att hitta om de har samma värden.

Syntax:

public static boolean equals(Object a, Object b)

equals() metodparametrar

a – Argumentsträng för det första strängobjektet.

b – Argumentsträng för det andra strängobjektet.

return typer av metoden equals().

  • Returnerar sant om strängliteralerna är lika. Om du skickar ett nollvärde i de två argumenten returneras också sant.
  • Returnerar falskt om strängliteralerna inte är lika.

Exempel:

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

Produktion:

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

Förklaring:

Från det här exemplet kan du se att utdata är ett booleskt värde på sant, eftersom de jämförda strängarna är lika.

Metod 3: String compareTo()-metoden

Ocuco-landskapet Java String compareTo() metoden jämför två strängar i alfabetisk ordning. Det brukar kallas lexikografisk ordning.

Syntax:

public int compareTo(String str)

compareTo() metodparametrar

str – Strängen som ska jämföras med den aktuella strängen.

compareTo()-metoden returnerar

  • 0 – Returnerar noll om det angivna objektet är lika med den aktuella strängen.
  • < 0 – Returnerar ett tal mindre än noll om denna sträng är mindre än det angivna objektet.
  • > 0 – Returnerar ett tal större än noll om denna sträng överskrider den angivna strängen.

Exempel:

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

Förväntad produktion:

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

Förklaring:

Det första resultatet returnerar värdet noll, eftersom den första och andra strängen är lika.

Det andra resultatet returnerar värdet trettiotvå, eftersom tecknen är olika.

Obs: För att ignorera skiftläge kan du använda metoden "compareToIgnoreCase".

Metod 4: StringUtils equals() metod

Ocuco-landskapet Java StringUtils är lika med() metoden jämför likheten mellan två teckensekvenser.

Se till att du har lagt till biblioteket ”org.apache.commons.lang3” i ditt program. Detta gör att du kan jämföra strängar med hjälp av StringUtils-metoderna.

För Maven-projekt, använd detta styra för att lägga till biblioteket i projektet.

Om du däremot vill lägga till biblioteket utan några byggverktyg, använd detta styra.

Syntax:

public static boolean equals(CharSequence cs1, CharSequence cs2)

StringUtils equals() metodparametrar

  • cs1 – En sekvens av tecken för det första argumentet.
  • cs2 – En sekvens av tecken för det andra argumentet.

StringUtils equals()-metoden returnerar

  • Returnerar sant om strängjämförelsen är lika. Det gäller även om du skickar ett nullvärde i de två argumenten.
  • Returnerar falskt om strängjämförelsen inte är lika.

Exempel:

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

Produktion:

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

Förklaring:

Eftersom innehållet i den första och andra strängen är lika, returnerar resultatet sant.

Du kan använda metoden "equalsIgnoreCase" för att ignorera fallet.

Metod 5: StringUtils equalsAny() metod

Ocuco-landskapet Java StringUtils equalsAny() metod kontrollerar om det finns en sträng i argumenten.

Syntax:

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

StringUtils equalsAny() metodparametrar

  • string – Strängvärdet för det första argumentet. Argumentet kan också ha ett nollvärde.
  • searchStrings – En uppsättning strängargument för metoden för att hitta om den första argumentsträngen finns.

StringUtils equalsAny()-metoden returnerar

  • Returnerar sant om strängen som ska matchas finns i variabeln antal söksträngar. Detta gäller om båda argumenten är null.
  • Returnerar false om strängen som ska matchas inte matchar någon sträng i det variabla antalet söksträngar.

Exempel:

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

Produktion:

is Guru99 available: true
is GURU99 available: false

Förklaring:

Eftersom innehållet i den första strängen och den andra strängen är lika, returnerar resultatet sant. Du kan använda metoden "equalsAnyIgnoreCase" för att ignorera fallet.

Metod 6: Använd operatorn ==

Operatorn == på strängar kontrollerar om objektreferenser har samma adress.

Exempel:

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

Förväntad produktion:

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

Förklaring:

  • Det första resultatet returnerar ett booleskt värde på sant. Strängar med samma innehåll läggs till i samma strängpool, vilket innebär att strängarna delar en adress.
  • Det andra resultatet returnerar ett booleskt värde på falskt. Objekten har olika innehåll, vilket resulterar i olika strängpooler. Detta innebär att strängarna har separata objektreferenser; därmed är utdata falskt.

Metod 7: Skapa en anpassad metod för att jämföra två strängar i Java

Skapa en metod som jämför två strängar med hjälp av lexikografisk ordning.

Syntax:

public static int compareTwoStrings(String str1, String str2)

Anpassade metodparametrar

  • str1 – Strängen att jämföra.
  • str2 – Strängen att jämföra mot.

Anpassad metod returnerar

  • 0 – Returnerar noll om den första strängen är lika med den andra strängen.
  • < 0 – Returnerar ett tal mindre än noll om den första strängen är mindre än den andra strängen.
  • > 0 – Returnerar ett tal större än noll om den första strängen är större än den andra strängen.

Exempel:

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

Förväntad produktion:

is Guru99 equal to Guru99: 0

Förklaring:

Resultatet returnerade värdet noll, vilket betyder att den anpassade funktionen fungerar som förväntat.

Vanliga frågor

Ja. AI-assistenter kan rekommendera equals, compareTo eller StringUtils baserat på ditt mål och flagga den vanliga fallgropen ==. Du bör fortfarande bekräfta valet med tester för dina specifika data.

Ja. AI-verktyg upptäcker felaktig användning av == för innehållsjämförelse och föreslår istället lika med eller lika medIgnoreCase. Detta hjälper till att minska subtila likhetsfel som är vanliga för nybörjare som arbetar med strängar.

Operatorn == jämför objektreferenser, inte innehåll. Två strängar med samma värde kan ha olika referenser, så == kan returnera falskt. Använd equals() för tillförlitlig värdejämförelse.

Metoden equals() är skiftlägeskänslig, så “Guru99” och “GURU99” är inte lika. Metoden equalsIgnoreCase() jämför strängar utan att använda skillnader mellan stora och små bokstäver, och returnerar sant för båda.

Sammanfatta detta inlägg med: