Hvordan sammenligne to strenger i Java

โšก Smart oppsummering

Sammenligning av to strenger i Java kan gjรธres med flere metoder som matcher en sekvens av tegn for likhet eller rekkefรธlge. Denne ressursen forklarer sju tilnรฆrminger, inkludert String equals, Objects equals, compareTo, StringUtils-metoder, ==-operatoren og en tilpasset sammenligningsmetode, hver med eksempler.

  • ๐ŸŸฐ Streng er lik(): Sammenligner to strengverdier for รฅ skille mellom store og smรฅ bokstaver, og returnerer sann eller usann.
  • ๐Ÿ“ฆ Objekter er lik(): Sammenligner to strenger pรฅ en sikker mรฅte, og behandler to nullverdier som like.
  • ๐Ÿ”ค sammenlignTil(): Sammenligner strenger i leksikografisk rekkefรธlge, og returnerer null, et negativt eller et positivt tall.
  • ๐Ÿงฐ StringUtils-metoder: equals() og equalsAny() fra Apache Commons sammenligner strenger og hรฅndterer nullverdier pรฅ en elegant mรฅte.
  • โš ๏ธ == Operator: Sammenligner objektreferanser, ikke innhold, sรฅ den bรธr ikke brukes til verdisammenligning.

Hvordan sammenligne to strenger i Java

Metoder for รฅ sammenligne strenger i Java

Java gir forskjellige metoder du kan bruke for รฅ sammenligne to strenger i Java. Strengesammenligning i Java er en funksjon som matcher en sekvens av tegn til en streng.

For รฅ lรฆre รฅ sammenligne strenger i Java, kan du bruke metodene som tilbys av fรธlgende klasser:

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

De fleste av disse Java Metoder for sammenligning av strenger har lรธsninger for รฅ ignorere store og smรฅ bokstaver. I denne veiledningen lรฆrer du de forskjellige metodene du kan bruke for รฅ sammenligne to strenger.

Metode 1: Streng lik() metode

Ocuco Java String equals() metode sammenligner to strengobjekter for like strengverdier.

Syntaks:

public boolean equals(Object anObject)

equals() metodeparametere:

anObject โ€“ Argumentstrengen for รฅ sammenligne strenger.

equals()-metodens returtyper

  • Returnerer sant hvis den angitte strengen er den samme som den fรธrste strengen.
  • Returnerer usann hvis den fรธrste strengen 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 utgang:

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

Forklaring:

  • Du fikk usann i den siste utgangen fordi det spesifiserte objektet har en annen store og smรฅ bokstaver.

OBS: Bruk string equals()-metoden for รฅ sammenligne strenger der det skilles mellom store og smรฅ bokstaver. Bruk ยซequalsIgnoreCaseยป-metoden for รฅ sammenligne strengobjekter mens du ignorerer store og smรฅ bokstaver.

Metode 2: Objects equals() metode

Ocuco Java Objekter er lik() metoden sammenligner to strengobjekter for รฅ finne om de har samme verdier.

Syntaks:

public static boolean equals(Object a, Object b)

equals() metodeparametere

a โ€“ Argumentstreng for det fรธrste strengobjektet.

b โ€“ Argumentstreng for det andre strengobjektet.

equals()-metodens returtyper

  • Returnerer sann hvis strengliteralene er like. Hvis du sender en nullverdi i de to argumentene, vil det ogsรฅ returneres sant.
  • Returnerer usann hvis strengliteralene ikke er like.

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

Utgang:

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

Forklaring:

Fra dette eksemplet kan du se at utdataene er en boolsk verdi av sann, siden strengene som sammenlignes er like.

Metode 3: String compareTo() metode

Ocuco Java String compareTo() metoden sammenligner to strenger i alfabetisk rekkefรธlge. Det blir vanligvis referert til som leksikografisk rekkefรธlge.

Syntaks:

public int compareTo(String str)

compareTo() metodeparametere

str โ€“ Strengen som skal sammenlignes med gjeldende streng.

compareTo()-metoden returnerer

  • 0 โ€“ Returnerer null hvis det angitte objektet er lik gjeldende streng.
  • < 0 โ€“ Returnerer et tall mindre enn null hvis denne strengen er mindre enn det angitte objektet.
  • > 0 โ€“ Returnerer et tall stรธrre enn null hvis denne strengen overskrider den angitte strengen.

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 utgang:

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

Forklaring:

Det fรธrste resultatet returnerer verdien null, siden den fรธrste og andre strengen er like.

Det andre resultatet returnerer verdien trettito, siden tegnene er forskjellige.

OBS: For รฅ ignorere store og smรฅ bokstaver kan du bruke metoden ยซcompareToIgnoreCaseยป.

Metode 4: StringUtils equals() metode

Ocuco Java StringUtils er lik() metoden sammenligner likheten mellom to sekvenser av tegn.

Sรธrg for at du har lagt til biblioteket ยซorg.apache.commons.lang3ยป i programmet ditt. Dette lar deg sammenligne strenger ved hjelp av StringUtils-metodene.

For Maven-prosjekter, bruk denne veilede for รฅ legge til biblioteket i prosjektet.

Hvis du imidlertid vil legge til biblioteket uten byggeverktรธy, kan du bruke dette. veilede.

Syntaks:

public static boolean equals(CharSequence cs1, CharSequence cs2)

StringUtils equals() metodeparametere

  • cs1 โ€“ En sekvens av tegn for det fรธrste argumentet.
  • cs2 โ€“ En sekvens av tegn for det andre argumentet.

StringUtils equals()-metoden returnerer

  • Returnerer sann hvis strengsammenligningen er lik. Dette gjelder ogsรฅ hvis du sender en nullverdi i de to argumentene.
  • Returnerer usann hvis strengsammenligningen ikke er lik.

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

Utgang:

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

Forklaring:

Siden innholdet i den fรธrste og andre strengen er like, returnerer resultatet sant.

Du kan bruke ยซequalsIgnoreCaseยป-metoden for รฅ ignorere saken.

Metode 5: StringUtils equalsAny() metode

Ocuco Java StringUtils equalsAny() metoden sjekker om det finnes en streng i argumentene.

Syntaks:

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

StringUtils equalsAny() metodeparametere

  • streng โ€“ strengverdien for det fรธrste argumentet. Argumentet kan ogsรฅ ha en nullverdi.
  • searchStrings โ€“ Et sett med strengargumenter for metoden for รฅ finne om den fรธrste argumentstrengen er til stede.

StringUtils equalsAny()-metoden returnerer

  • Returnerer sann hvis strengen som skal matches finnes i variabelen antall sรธkestrenger. Dette gjelder hvis begge argumentene er null.
  • Returnerer usann hvis strengen som skal samsvare ikke samsvarer med noen streng i variabelt antall sรธkestrenger.

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

Utgang:

is Guru99 available: true
is GURU99 available: false

Forklaring:

Siden innholdet i den fรธrste strengen og den andre strengen er like, returnerer resultatet sant. Du kan bruke ยซequalsAnyIgnoreCaseยป-metoden for รฅ ignorere saken.

Metode 6: Bruke == operator

Operatoren == pรฅ strenger sjekker om objektreferanser 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 utgang:

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

Forklaring:

  • Det fรธrste resultatet returnerer en boolsk verdi pรฅ sann. Strenger med samme innhold legges til i samme strengpool, og dermed deler strengene รฉn adresse.
  • Det andre resultatet returnerer en boolsk verdi pรฅ ยซfalseยป. Objektene har ulikt innhold, noe som resulterer i forskjellige strengpooler. Dette betyr at strengene har separate objektreferanser; dermed er utdataene ยซfalseยป.

Metode 7: Opprette en egendefinert metode for รฅ sammenligne to strenger i Java

Lag en metode som sammenligner to strenger ved รฅ bruke leksikografisk rekkefรธlge.

Syntaks:

public static int compareTwoStrings(String str1, String str2)

Egendefinerte metodeparametere

  • str1 โ€“ Strengen som skal sammenlignes.
  • str2 โ€“ Strengen รฅ sammenligne mot.

Egendefinert metode returnerer

  • 0 โ€“ Returnerer null hvis den fรธrste strengen er lik den andre strengen.
  • < 0 โ€“ Returnerer et tall mindre enn null hvis den fรธrste strengen er mindre enn den andre strengen.
  • > 0 โ€“ Returnerer et tall stรธrre enn null hvis den fรธrste strengen er stรธrre enn den andre strengen.

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 utgang:

is Guru99 equal to Guru99: 0

Forklaring:

Resultatet returnerte en verdi pรฅ null, noe som betyr at den tilpassede funksjonen fungerer som forventet.

Spรธrsmรฅl og svar

Ja. AI-assistenter kan anbefale equals, compareTo eller StringUtils basert pรฅ mรฅlet ditt, og flagge den vanlige fallgruven ==. Du bรธr fortsatt bekrefte valget med tester for dine spesifikke data.

Ja. AI-verktรธy oppdager misbruk av == for innholdssammenligning og foreslรฅr ยซequalsยป eller ยซequalsIgnoreCaseยป i stedet. Dette bidrar til รฅ redusere subtile likhetsfeil som er vanlige for nybegynnere som jobber med strenger.

Operatoren == sammenligner objektreferanser, ikke innhold. To strenger med samme verdi kan ha forskjellige referanser, sรฅ == kan returnere usann. Bruk equals() for pรฅlitelig verdisammenligning.

equals()-metoden skiller mellom store og smรฅ bokstaver, sรฅ ยซGuruยซ99ยป og ยซGURU99ยป er ikke like. Metoden equalsIgnoreCase() sammenligner strenger mens den ignorerer forskjeller mellom store og smรฅ bokstaver, og returnerer sann for begge.

Oppsummer dette innlegget med: