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 menetelmiä.

  • String luokka alkaen Java.lang-paketti.
  • Objects luokka alkaen Java.util-paketti.
  • StringUtils-luokka paketista org.apache.commons.lang3.

Useimmat näistä Java merkkijonojen vertailumenetelmissä on ratkaisuja tapauksen huomiotta jättämiseen. Tässä Java opetusohjelmassa opit erilaisia ​​menetelmiä, joilla voit vertailla kahta merkkijonoa.

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.

Huomautuksia: Käytä merkkijono yhtäsuuri -menetelmää kirjainkoolla eroteltuun merkkijonojen vertailuun. Käytä "equalsIgnoreCase" -menetelmää merkkijonoobjektien vertaamiseen eri merkkijonoarvoilla.

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ä voit nähdä, että tulos on totuusarvo, 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 samat.

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

Huomautus: Jos haluat ohittaa tapaukset, voit käyttää "compareToIgnoreCase" -menetelmää.

Tapa 4: StringUtils equals() -metodi

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

Varmista, että olet lisännyt ohjelmaan kirjaston "org.apache.commons.lang3". Näin voit verrata merkkijonoja StringUtil-menetelmillä.

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

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

Syntaksi:

public static boolean equals(CharSequnce cs1, CharSequence cs2)

StringUtils equals() -metodin parametrit

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

StringUtils equals() -metodi palauttaa

  • Palauttaa tosi, jos merkkijonovertailu on yhtä suuri. Sitä sovelletaan, jos välität nolla-arvon kahdessa argumentissa.
  • 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 tosi, jos vastaava merkkijono on hakumerkkijonojen muuttujamäärässä. Tämä pätee, jos molemmat argumentit ovat tyhjiä.
  • 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 loogisen arvon tosi. Merkkijonot, joilla on sama sisältö, lisätään samaan merkkijonoon, joten merkkijonolla on yksi osoite.
  • Toinen tulos palauttaa loogisen arvon false. Objekteilla on erilainen sisältö, mikä johtaa muihin merkkijonoihin. Tämä tarkoittaa, että merkkijonoilla on erilliset objektiviitteet; joten tulos on väärä.

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.

Yhteenveto:

- Java Vertaa kahta merkkijonoa käytettävä menetelmä riippuu seuraavista tekijöistä.

  • Halu hallita menetelmääsi. Luo tässä tapauksessa mukautettu menetelmä.
  • Et voi käyttää Legacy-koodia. kanssa Java 6 ja alempi.
  • Menetelmä, jolla on optimaalinen suorituskyky.
  • Tietotyyppi, jonka kanssa työskentelet. Esimerkiksi merkkijonon täsmääminen muuttujaargumenttien joukosta.
  • Ulkoistetun kirjaston tarjoamat ominaisuudet. Esimerkiksi StringUtils-kirjasto tarjoaa erilaisia ​​menetelmiä merkkijonojen vertailuun.