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-paket.
  • Objektklass från Java.util-paketet.
  • StringUtils-klassen från org.apache.commons.lang3-paketet.

De flesta av dessa Java jämför strängmetoder har lösningar för att ignorera fallet. I detta Java tutorial kommer du att lära dig de olika metoderna som du kan använda för att jämföra två strängar.

Metod 1: String equals()-metoden

Smakämnen 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.

Exempelvis:

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.

Anmärkningar: 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 med olika strängvärden.

Metod 2: Metoden Objects equals()

Smakämnen 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.

Exempelvis:

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 strängarna som jämförs är lika.

Metod 3: String compareTo()-metoden

Smakämnen 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.

Exempelvis:

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 ett värde på trettiotvå eftersom tecknen är olika.

Notera: För att ignorera fallen kan du använda metoden "compareToIgnoreCase".

Metod 4: StringUtils equals() metod

Smakämnen Java StringUtils är lika med() metoden jämför likheten mellan två teckensekvenser.

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

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

Men om du vill lägga till biblioteket utan några byggverktyg, använd detta styra.

Syntax:

public static boolean equals(CharSequnce 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 om du skickar ett nollvärde i de två argumenten.
  • Returnerar falskt om strängjämförelsen inte är lika.

Exempelvis:

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

Smakämnen 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 det variabla antalet 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.

Exempelvis:

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.

Exempelvis:

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 och därför delar strängen en adress.
  • Det andra resultatet returnerar ett booleskt värde på false. Objekten har olika innehåll, vilket resulterar i andra strängpooler. Det betyder att strängarna har separata objektreferenser; sålunda är utgången falsk.

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.

Exempelvis:

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.

Sammanfattning:

Smakämnen Java jämför två strängar metoden att använda beror på följande faktorer.

  • Önskan att ha kontroll över din metod. Skapa i det här fallet en anpassad metod.
  • Du kan inte använda äldre kod. med Java 6 och lägre.
  • Metoden som har optimal prestanda.
  • Den typ av data du arbetar med. Till exempel matcha en sträng från en uppsättning variabla argument.
  • Funktionerna som tillhandahålls av det utlagda biblioteket. Till exempel erbjuder StringUtils-biblioteket olika metoder för att jämföra strängar.