Kako usporediti dva niza u Java

โšก Pametni saลพetak

Usporeฤ‘ivanje dva niza znakova u Java moลพe se postiฤ‡i s nekoliko metoda koje usporeฤ‘uju niz znakova radi jednakosti ili redoslijeda. Ovaj resurs objaลกnjava sedam pristupa, ukljuฤujuฤ‡i metode String equals, Objects equals, compareTo, StringUtils, operator == i prilagoฤ‘enu metodu usporedbe, svaki s primjerima.

  • ๐ŸŸฐ String je jednak(): Usporeฤ‘uje dvije nizovne vrijednosti radi jednakosti koja razlikuje velika i mala slova, vraฤ‡ajuฤ‡i true ili false.
  • ???? Objekti su jednaki(): Sigurno usporeฤ‘uje dva niza znakova, tretirajuฤ‡i dvije null vrijednosti kao jednake.
  • ๐Ÿ”ค usporediS(): Usporeฤ‘uje nizove nizova leksikografskim redoslijedom, vraฤ‡ajuฤ‡i nulu, negativni ili pozitivni broj.
  • ๐Ÿงฐ Metode StringUtils: equals() i equalsAny() iz Apache Commonsa usporeฤ‘uju stringove i elegantno obraฤ‘uju null vrijednosti.
  • โš ๏ธ == Operator: Usporeฤ‘uje reference objekata, a ne sadrลพaj, stoga se ne bi trebao koristiti za usporedbu vrijednosti.

Kako usporediti dva niza u Java

Metode za usporedbu nizova Java

Java pruลพa razliฤite metode koje moลพete iskoristiti za usporedbu dva niza Java. Usporedba nizova u Java je znaฤajka koja povezuje niz znakova s โ€‹โ€‹nizom.

Da biste nauฤili kako usporediti nizove u Java, moลพete koristiti metode koje pruลพaju sljedeฤ‡e klase:

  • Klasa stringova iz paketa java.lang.
  • Klasa Objekti iz paketa java.util.
  • Klasa StringUtils iz paketa org.apache.commons.lang3.

Veฤ‡ina tih Java Metode za usporedbu nizova imaju rjeลกenja za ignoriranje velikih i malih slova. U ovom vodiฤu nauฤit ฤ‡ete razliฤite metode koje moลพete koristiti za usporedbu dva niza.

Metoda 1: Metoda String equals().

The Java Niz jednako() metoda usporeฤ‘uje dva objekta niza za jednake vrijednosti niza.

Sintaksa:

public boolean equals(Object anObject)

parametri metode equals():

anObject โ€“ Niz argumenata za usporedbu nizova.

return vrste metode equals().

  • Vraฤ‡a true ako je navedeni literal niza isti kao prvi niz.
  • Vraฤ‡a false ako prvi niz nije isti kao niz argumenta.

Primjer:

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

Oฤekivani rezultat:

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

Objaลกnjenje:

  • Dobili ste false u zadnjem izlazu jer navedeni objekt ima razliฤita velika i mala slova.

Biljeลกka: Koristite metodu string equals() za usporedbu stringova koja razlikuje velika i mala slova. Koristite metodu "equalsIgnoreCase" za usporedbu string objekata bez obzira na velika i mala slova.

Metoda 2: Metoda Objects equals().

The Java Objekti jednako() metoda usporeฤ‘uje dva objekta niza kako bi otkrila imaju li iste vrijednosti.

Sintaksa:

public static boolean equals(Object a, Object b)

parametri metode equals().

a โ€“ Niz argumenata za prvi objekt niza.

b โ€“ Niz argumenata za drugi objekt niza.

return vrste metode equals().

  • Vraฤ‡a true ako su literali niza jednaki. Prosljeฤ‘ivanje nulte vrijednosti u dva argumenta takoฤ‘er ฤ‡e vratiti true.
  • Vraฤ‡a false ako literali niza nisu jednaki.

Primjer:

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

Izlaz:

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

Objaลกnjenje:

Iz ovog primjera moลพete vidjeti da je izlaz logiฤka vrijednost true, buduฤ‡i da su usporeฤ‘eni nizovi jednaki.

Metoda 3: String compareTo() metoda

The Java Niz compareTo() metoda usporeฤ‘uje dva niza abecednim redom. Obiฤno se naziva leksikografski poredak.

Sintaksa:

public int compareTo(String str)

parametri metode compareTo().

str โ€“ Niz za usporedbu s trenutnim nizom.

metoda compareTo() vraฤ‡a

  • 0 โ€“ Vraฤ‡a nulu ako je navedeni objekt jednak trenutnom nizu.
  • < 0 โ€“ Vraฤ‡a broj manji od nule ako je ovaj niz manji od navedenog objekta.
  • > 0 โ€“ Vraฤ‡a broj veฤ‡i od nule ako ovaj niz premaลกuje navedeni niz.

Primjer:

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

Oฤekivani rezultat:

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

Objaลกnjenje:

Prvi rezultat vraฤ‡a vrijednost nula, buduฤ‡i da su prvi i drugi niz znakova jednaki.

Drugi rezultat vraฤ‡a vrijednost trideset i dva, buduฤ‡i da su znakovi razliฤiti.

Biljeลกka: Za zanemarivanje velikih i malih slova moลพete koristiti metodu "compareToIgnoreCase".

Metoda 4: Metoda StringUtils equals().

The Java StringUtils jednako() metoda usporeฤ‘uje jednakost dva niza znakova.

Provjerite jeste li u svoj program dodali biblioteku โ€žorg.apache.commons.lang3โ€œ. To ฤ‡e vam omoguฤ‡iti usporedbu nizova pomoฤ‡u metoda StringUtils.

Za Maven projekte koristite ovo voditi za dodavanje knjiลพnice u projekt.

Meฤ‘utim, ako ลพelite dodati biblioteku bez ikakvih alata za izgradnju, koristite ovo voditi.

Sintaksa:

public static boolean equals(CharSequence cs1, CharSequence cs2)

Parametri metode StringUtils equals().

  • cs1 โ€“ Niz znakova za prvi argument.
  • cs2 โ€“ Niz znakova za drugi argument.

Metoda StringUtils equals() vraฤ‡a

  • Vraฤ‡a vrijednost true ako je usporedba nizova jednaka. Takoฤ‘er se primjenjuje ako u dva argumenta proslijedite vrijednost null.
  • Vraฤ‡a false ako usporedba niza nije jednaka.

Primjer:

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

Izlaz:

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

Objaลกnjenje:

Buduฤ‡i da su sadrลพaji prvog i drugog niza jednaki, rezultat vraฤ‡a true.

Moลพete koristiti metodu โ€œequalsIgnoreCaseโ€ da zanemarite velika i mala slova.

Metoda 5: Metoda StringUtils equalsAny().

The Java StringUtils equalsAny() metoda provjerava postoji li niz u argumentima.

Sintaksa:

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

Parametri metode StringUtils equalsAny().

  • niz โ€“ vrijednost niza za prvi argument. Argument takoฤ‘er moลพe imati vrijednost null.
  • searchStrings โ€“ Skup argumenata niza za metodu koja pronalazi postoji li prvi niz argumenata.

Metoda StringUtils equalsAny() vraฤ‡a

  • Vraฤ‡a vrijednost true ako niz za traลพenje postoji u varijabli broj nizova za pretraลพivanje. To se primjenjuje ako su oba argumenta null.
  • Vraฤ‡a false ako niz za podudaranje ne odgovara niti jednom nizu u varijabli broja nizova za pretraลพivanje.

Primjer:

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

Izlaz:

is Guru99 available: true
is GURU99 available: false

Objaลกnjenje:

Buduฤ‡i da su sadrลพaji prvog i drugog niza jednaki, rezultat vraฤ‡a true. Moลพete koristiti metodu โ€œequalsAnyIgnoreCaseโ€ da zanemarite velika i mala slova.

Metoda 6: Koriลกtenje operatora ==

Operator == na nizovima provjerava imaju li reference objekta istu adresu.

Primjer:

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

Oฤekivani rezultat:

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

Objaลกnjenje:

  • Prvi rezultat vraฤ‡a logiฤku vrijednost true. Nizovi s istim sadrลพajem dodaju se u isti skup nizova, stoga nizovi dijele jednu adresu.
  • Drugi rezultat vraฤ‡a logiฤku vrijednost false. Objekti imaju razliฤit sadrลพaj, ลกto rezultira razliฤitim skupovima stringova. To znaฤi da stringovi imaju odvojene reference na objekte; stoga je izlaz false.

Metoda 7: Stvaranje prilagoฤ‘ene metode za usporedbu dva niza Java

Napravite metodu koja usporeฤ‘uje dva niza pomoฤ‡u leksikografskog reda.

Sintaksa:

public static int compareTwoStrings(String str1, String str2)

Parametri prilagoฤ‘ene metode

  • str1 โ€“ Niz za usporedbu.
  • str2 โ€“ Niz s kojim se usporeฤ‘uje.

Prilagoฤ‘ena metoda povrata

  • 0 โ€“ Vraฤ‡a nulu ako je prvi niz jednak drugom nizu.
  • < 0 โ€“ Vraฤ‡a broj manji od nule ako je prvi niz manji od drugog niza.
  • > 0 โ€“ Vraฤ‡a broj veฤ‡i od nule ako je prvi niz veฤ‡i od drugog niza.

Primjer:

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

Oฤekivani rezultat:

is Guru99 equal to Guru99: 0

Objaลกnjenje:

Rezultat je vratio vrijednost nula, ลกto znaฤi da prilagoฤ‘ena funkcija radi prema oฤekivanjima.

Pitanja i odgovori

Da. AI asistenti mogu preporuฤiti equals, compareTo ili StringUtils na temelju vaลกeg cilja i oznaฤiti uobiฤajenu greลกku ==. I dalje biste trebali potvrditi izbor testovima za svoje specifiฤne podatke.

Da. Alati umjetne inteligencije otkrivaju zlouporabu znaka == za usporedbu sadrลพaja i umjesto toga predlaลพu equals ili equalsIgnoreCase. To pomaลพe u smanjenju suptilnih greลกaka u jednakosti koje su uobiฤajene za poฤetnike koji rade s nizovima znakova.

Operator == usporeฤ‘uje reference objekata, a ne sadrลพaj. Dva niza znakova s โ€‹โ€‹istom vrijednoลกฤ‡u mogu imati razliฤite reference, pa == moลพe vratiti false. Za pouzdanu usporedbu vrijednosti koristite equals().

Metoda equals() razlikuje velika i mala slova, pa tako "Guru"99" i "GURU99" nisu jednaki. Metoda equalsIgnoreCase() usporeฤ‘uje nizove znakova zanemarujuฤ‡i razlike izmeฤ‘u velikih i malih slova, vraฤ‡ajuฤ‡i vrijednost true za oba.

Saลพmite ovu objavu uz: