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.

Tiivistรค tรคmรค viesti seuraavasti: