Kuinka vertailla kahta merkkijonoa Java

⚡ Älykäs yhteenveto

Kahden merkkijonon vertailu Java voidaan tehdä useilla metodeilla, jotka vastaavat merkkijonoa yhtäsuuruuden tai järjestyksen suhteen. Tässä resurssissa selitetään seitsemän lähestymistapaa, mukaan lukien String equals, Objects equals, compareTo, StringUtils-metodit, ==-operaattori ja mukautettu vertailumetodi, joista jokaisesta löytyy esimerkkejä.

  • 🟰 Merkkijono on yhtä kuin(): Vertailee kahta merkkijonoarvoa kirjainkoon mukaan ja palauttaa arvon true tai false.
  • 📦 Objektit ovat yhtä suuret(): Vertailee kahta merkkijonoa turvallisesti ja käsittelee kahta null-arvoa yhtä suurina.
  • 🔤 vertaa(): Vertailee merkkijonoja leksikografisessa järjestyksessä ja palauttaa nollan, negatiivisen tai positiivisen luvun.
  • 🧰 StringUtils-metodit: Apache Commonsin equals() ja equalsAny() vertailevat merkkijonoja ja käsittelevät null-arvoja sujuvasti.
  • ⚠️ == Operator: Vertailee objektiviittauksia, ei sisältöä, joten sitä ei tule käyttää arvojen vertailuun.

Kuinka vertailla kahta merkkijonoa Java

Menetelmät merkkijonojen vertailuun Java

Java tarjoaa erilaisia ​​menetelmiä, joiden avulla voit verrata kahta merkkijonoa Java. Merkkijonojen vertailu sisään Java on ominaisuus, joka sovittaa merkkijonon merkkijonoon.

Opi vertaamaan merkkijonoja Java, voit käyttää seuraavien luokkien tarjoamia metodeja:

  • Merkkijonoluokka java.lang-paketista.
  • Objects-luokka java.util-paketista.
  • StringUtils-luokka paketista org.apache.commons.lang3.

Useimmat näistä Java compare-strings-metodeilla on ratkaisuja kirjainkoon huomiotta jättämiseen. Tässä opetusohjelmassa opit eri metodit, joita voit käyttää kahden merkkijonon vertailemiseen.

Tapa 1: String equals() -metodi

Java jono equals() -metodi vertaa kahta merkkijonoobjektia yhtäläisten merkkijonoarvojen saamiseksi.

Syntaksi:

public boolean equals(Object anObject)

equals()-metodin parametrit:

anObject – argumenttimerkkijono merkkijonojen vertailua varten.

equals()-metodin palautustyypit

  • Palauttaa tosi, jos annettu merkkijonoliteraali on sama kuin ensimmäinen merkkijono.
  • Palauttaa epätosi, jos ensimmäinen merkkijono ei ole sama kuin argumenttimerkkijono.

Esimerkiksi:

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

Odotettu tuotos:

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

Selitys:

  • Sait epätosi viimeisessä tulosteessa, koska määritetyllä objektilla on eri kirjainkoko.

Huomautus: Käytä string equals() -metodia kirjainkoon huomioivaan merkkijonojen vertailuun. Käytä “equalsIgnoreCase” -metodia merkkijono-objektien vertailuun jättäen kirjainkoon huomiotta.

Tapa 2: Objects equals() -metodi

Java Objektit yhtä kuin () menetelmä vertaa kahta merkkijonoobjektia selvittääkseen, onko niillä samat arvot.

Syntaksi:

public static boolean equals(Object a, Object b)

equals()-metodin parametrit

a – Argumenttimerkkijono ensimmäiselle merkkijonoobjektille.

b – Argumenttimerkkijono toiselle merkkijonoobjektille.

equals()-metodin palautustyypit

  • Palauttaa tosi, jos merkkijonon literaalit ovat yhtä suuret. Nolla-arvon välittäminen molemmissa argumenteissa palauttaa myös tosi.
  • Palauttaa epätosi, jos merkkijonon literaalit eivät ole yhtä suuret.

Esimerkiksi:

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

lähtö:

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

Selitys:

Tästä esimerkistä näet, että tuloste on totuusarvo true, koska verratut merkkijonot ovat yhtä suuret.

Menetelmä 3: String vertaa() -menetelmä

Java merkkijono vertaa() menetelmä vertaa kahta merkkijonoa aakkosjärjestyksessä. Sitä kutsutaan yleensä leksikografiseksi järjestykseksi.

Syntaksi:

public int compareTo(String str)

vertaaTo()-menetelmän parametreja

str – merkkijono, jota verrataan nykyiseen merkkijonoon.

vertaaTo()-menetelmä palauttaa

  • 0 – Palauttaa nollan, jos määritetty objekti on yhtä suuri kuin nykyinen merkkijono.
  • < 0 – Palauttaa luvun, joka on pienempi kuin nolla, jos tämä merkkijono on pienempi kuin määritetty objekti.
  • > 0 – Palauttaa nollaa suuremman luvun, jos tämä merkkijono ylittää annetun merkkijonon.

Esimerkiksi:

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

Odotettu tuotos:

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

Selitys:

Ensimmäinen tulos palauttaa arvon nolla, koska ensimmäinen ja toinen merkkijono ovat yhtä suuret.

Toinen tulos palauttaa arvon kolmekymmentäkaksi, koska merkit ovat erilaiset.

Huomautus: Voit ohittaa kirjainkoon käyttämällä ”compareToIgnoreCase”-metodia.

Tapa 4: StringUtils equals() -metodi

Java StringUtils equals() menetelmä vertaa kahden merkkijonon yhtäläisyyttä.

Varmista, että olet lisännyt ohjelmaasi kirjaston ”org.apache.commons.lang3”. Tämän avulla voit vertailla merkkijonoja StringUtils-metodien avulla.

Käytä tätä Maven-projekteissa ohjaavat lisätäksesi kirjaston projektiin.

Jos kuitenkin haluat lisätä kirjaston ilman työkaluja, käytä tätä ohjaavat.

Syntaksi:

public static boolean equals(CharSequence cs1, CharSequence cs2)

StringUtils equals() -metodin parametrit

  • cs1 – Ensimmäisen argumentin merkkijono.
  • cs2 – Toisen argumentin merkkijono.

StringUtils equals() -metodi palauttaa

  • Palauttaa arvon true, jos merkkijonojen vertailu on yhtäsuuri. Tämä pätee myös, jos kahdessa argumentissa on tyhjä arvo.
  • Palauttaa epätosi, jos merkkijonovertailu ei ole yhtä suuri.

Esimerkiksi:

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

lähtö:

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

Selitys:

Koska ensimmäisen ja toisen merkkijonon sisältö on sama, tulos palauttaa tosi.

Voit käyttää "equalsIgnoreCase"-menetelmää kirjainkoon huomiotta jättämiseen.

Tapa 5: StringUtils equalsAny() -metodi

Java StringUtils equalsAny() menetelmä tarkistaa, onko argumenteissa merkkijono.

Syntaksi:

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

StringUtils equalsAny()-metodin parametrit

  • merkkijono – Ensimmäisen argumentin merkkijonoarvo. Argumentilla voi myös olla nolla-arvo.
  • searchStrings – Joukko merkkijonoargumentteja, joiden avulla menetelmä selvittää, onko ensimmäinen argumenttimerkkijono olemassa.

StringUtils equalsAny() -metodi palauttaa

  • Palauttaa arvon true, jos vastaava merkkijono on olemassa muuttujan hakumerkkijonojen määrä -kohdassa. Tämä pätee, jos molemmat argumentit ovat null-arvoja.
  • Palauttaa arvon false, jos vastaava merkkijono ei vastaa yhtään merkkijonoa muuttujamäärässä hakumerkkijonoja.

Esimerkiksi:

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

lähtö:

is Guru99 available: true
is GURU99 available: false

Selitys:

Koska ensimmäisen ja toisen merkkijonon sisältö on yhtä suuri, tulos palauttaa tosi. Voit käyttää "equalsAnyIgnoreCase" -menetelmää kirjainkoon huomiotta jättämiseen.

Tapa 6: Käytä ==-operaattoria

Merkkijonojen ==-operaattori tarkistaa, onko objektiviittauksilla sama osoite.

Esimerkiksi:

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

Odotettu tuotos:

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

Selitys:

  • Ensimmäinen tulos palauttaa totuusarvon true. Samansisältöiset merkkijonot lisätään samaan merkkijonopooliin, joten niillä on yksi yhteinen osoite.
  • Toinen tulos palauttaa totuusarvon false. Objekteilla on eri sisältö, mikä johtaa eri merkkijonopooleihin. Tämä tarkoittaa, että merkkijonoilla on erilliset objektiviittaukset; näin ollen tuloste on false.

Tapa 7: Mukautetun menetelmän luominen kahden merkkijonon vertailua varten Java

Luo menetelmä, joka vertaa kahta merkkijonoa käyttämällä leksikografista järjestystä.

Syntaksi:

public static int compareTwoStrings(String str1, String str2)

Mukautetut menetelmäparametrit

  • str1 – verrattava merkkijono.
  • str2 – merkkijono, johon verrata.

Mukautettu menetelmä palauttaa

  • 0 – Palauttaa nollan, jos ensimmäinen merkkijono on yhtä suuri kuin toinen merkkijono.
  • < 0 – Palauttaa luvun, joka on pienempi kuin nolla, jos ensimmäinen merkkijono on pienempi kuin toinen merkkijono.
  • > 0 – Palauttaa nollaa suuremman luvun, jos ensimmäinen merkkijono on suurempi kuin toinen merkkijono.

Esimerkiksi:

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

Odotettu tuotos:

is Guru99 equal to Guru99: 0

Selitys:

Tulos palautti arvon nolla, mikä tarkoittaa, että mukautettu toiminto toimii odotetulla tavalla.

UKK

Kyllä. Tekoälyavustajat voivat suositella equals-, compareTo- tai StringUtils-kohteita tavoitteesi perusteella ja merkitä yleisen == -virheen. Sinun tulisi silti vahvistaa valintasi testeillä, jotka perustuvat tiettyyn dataasi.

Kyllä. Tekoälytyökalut havaitsevat == -merkin väärinkäytön sisällön vertailussa ja ehdottavat sen sijaan equals- tai equalsIgnoreCase-muotoa. Tämä auttaa vähentämään hienovaraisia ​​​​tasa-arvo-ongelmia, jotka ovat yleisiä merkkijonojen kanssa työskenteleville aloittelijoille.

== operaattori vertaa objektien viittauksia, ei sisältöjä. Kahdella saman arvon omaavalla merkkijonolla voi olla eri viittaukset, joten == saattaa palauttaa arvon false. Käytä equals()-funktiota luotettavaan arvojen vertailuun.

equals()-metodi on kirjainkokoriippuvainen, joten "Guru99” ja “GURU99” eivät ole yhtäsuuria. equalsIgnoreCase()-metodi vertailee merkkijonoja jättäen huomiotta isojen ja pienten kirjainten erot ja palauttaen molemmille arvon true.

Tiivistä tämä viesti seuraavasti: