Karakterláncok összehasonlítása Java-ban

1. Áttekintés

Ebben a cikkben az összehasonlítás különféle módjairól beszélünk Húrok Java-ban.

Mint Húr a Java egyik leggyakrabban használt adattípusa, ez természetesen nagyon gyakran használt művelet.

2. Húr Összehasonlítás Húr Osztály

2.1. Használata “==” Összehasonlító operátor

A „==” operátor használata a szöveges értékek összehasonlításához az egyik leggyakoribb hiba, amelyet a Java kezdők elkövetnek. Ez helytelen, mert “==” csak kettő referenciaegyenlőségét ellenőrzi Húrok, jelentése, ha ugyanarra az objektumra hivatkoznak, vagy sem.

Lássunk egy példát erre a viselkedésre:

String string1 = "összehasonlító operátor használata"; String string2 = "összehasonlító operátor használata"; String string3 = új karakterlánc ("összehasonlító operátort használ"); assertThat (string1 == string2) .isTrue (); assertThat (string1 == string3) .isFalse ();

A fenti példában az első állítás igaz, mert a két változó ugyanarra mutat Húr szó szerinti.

Másrészt a második állítás hamis, mert string1 szóval és string3 segítségével jön létre új operátor - ezért különböző objektumokra hivatkoznak.

2.2. Használata egyenlő ()

A Húr osztály felülírja a egyenlő () től örökölt Tárgy. Ez a módszer kettőt hasonlít össze Húrok karakterenként, figyelmen kívül hagyva a címüket.

Egyenlőnek tekinti őket, ha azonos hosszúságúak és a karakterek azonos sorrendben vannak:

String string1 = "egyenlő módszerrel"; String string2 = "egyenlő módszerrel"; String string3 = "EQUALS módszerrel"; String string4 = új karakterlánc ("egyenlő módszer használatával"); assertThat (string1.equals (string2)). isTrue (); assertThat (string1.equals (string4)). isTrue (); assertThat (string1.equals (null)). isFalse (); assertThat (string1.equals (string3)). isFalse ();

Ebben a példában string1, string2, és string4 a változók egyenlőek, mert címüktől függetlenül ugyanaz az eset és értékük van.

Mert string3 a metódus visszatér hamis, mivel a kis- és nagybetűk közötti különbség.

Továbbá, ha a két húr bármelyike nulla, akkor a metódus visszatér hamis.

2.3. Használata equalsIgnoreCase ()

A equalsIgnoreCase () metódus logikai értéket ad vissza. Ahogy a neve is sugallja ezt a módszert az összehasonlítás során figyelmen kívül hagyja a karakterek nagybetűit Húrok:

String string1 = "az egyenlő érték használata figyelmen kívül hagyja az esetet"; String string2 = "AZ EQUALS IGNORE CASE HASZNÁLATA"; assertThat (string1.equalsIgnoreCase (string2)). isTrue ();

2.4. Használata összehasonlítani()

A összehasonlítani() metódus egy int típusérték és kettőt hasonlít össze Húrok karakterről karakterre lexikográfiailag szótár vagy természetes rendezés alapján.

Ez a módszer 0-t ad vissza, ha kettő Húrok vagy ha mindkettő azonos nulla, negatív szám, ha az első Húr az argumentum elé kerül, és egy nullánál nagyobb szám, ha az első Húr érvelés után jön Húr.

Lássunk egy példát:

Karaktersorozat = "szerző"; Vonós könyv = "könyv"; String duplicateBook = "könyv"; assertThat (szerző.compareTo (könyv)) .isEqualTo (-1); assertThat (book.compareTo (szerző)) .isEqualTo (1); assertThat (duplicateBook.compareTo (könyv)) .isEqualTo (0);

2.5. Használata CompareToIgnoreCase ()

A CompareToIgnoreCase () hasonló az előző módszerhez, azzal a különbséggel, hogy figyelmen kívül hagyja a kis- és nagybetűket:

Karaktersorozat = "Szerző"; Vonós könyv = "könyv"; String duplicateBook = "KÖNYV"; assertThat (szerző.compareToIgnoreCase (könyv)) .isEqualTo (-1); assertThat (book.compareToIgnoreCase (szerző)) .isEqualTo (1); assertThat (duplicateBook.compareToIgnoreCase (könyv)) .isEqualTo (0);

3. Húr Összehasonlítás Tárgyak Osztály

Tárgyak egy olyan statisztikát tartalmazó segédprogram osztály egyenlő () módszer, hasznos ebben a forgatókönyvben - kettő összehasonlítása Húrok.

A módszer visszatér igaz ha kettő Húrok egyenlőek első összehasonlítva őket a címük alapján azaz „==”. Következésképpen, ha mindkét érv igen nulla, visszatér igaz és ha pontosan egy érv az nulla, hamis értéket ad vissza.

Ellenkező esetben ezután egyszerűen felhívja a egyenlő () az átadott argumentum típusának osztálya - ami esetünkben az Húrok osztály egyenlő () módszer. Ez a módszer megkülönbözteti a kis- és nagybetűket, mert belsőleg hív Húr osztályé egyenlő () módszer.

Teszteljük ezt:

String string1 = "az objektumok használata egyenlő"; String string2 = "az objektumok használata egyenlő"; String string3 = new String ("az objektumok használata egyenlő"); assertThat (Objects.equals (string1, string2)). isTrue (); assertThat (Objects.equals (string1, string3)). isTrue (); assertThat (Objects.equals (null, null)). isTrue (); assertThat (Objektumok.egyenlő (null, string1)). isFalse ();

4. Húr Összehasonlítás Apache Commons

Az Apache Commons könyvtár tartalmaz egy ún. Segédosztályt StringUtils mert Húr-kapcsolódó műveletek; ennek is van néhány nagyon előnyös módszere Húr összehasonlítás.

4.1. Használata egyenlő () és equalsIgnoreCase ()

A egyenlő () a metódusa StringUtils osztály az. továbbfejlesztett változata Húr osztályos módszer egyenlő (), amely null értékeket is kezel:

assertThat (StringUtils.equals (null, null)) .isTrue (); assertThat (StringUtils.equals (null, "egyenlő módszer")) .isFalse (); assertThat (StringUtils.equals ("egyenlő módszer", "egyenlő módszer")) .isTrue (); assertThat (StringUtils.equals ("egyenlő módszer", "EQUALS MÓDSZER")) .isFalse ();

A equalsIgnoreCase () a metódusa StringUtils visszatér a logikai érték. Ez hasonlóan működik, mint egyenlő (), kivéve, hogy figyelmen kívül hagyja a Húrok:

assertThat (StringUtils.equalsIgnoreCase ("egyenlő módszer", "egyenlő módszer")) .isTrue (); assertThat (StringUtils.equalsIgnoreCase ("egyenlő módszer", "EQUALS MÓDSZER")) .isTrue ();

4.2. Használata equalsAny () és equalsAnyIgnoreCase ()

A equalsAny () A módszer első érve a Húr a második pedig multi-arg típusú CharSequence. A módszer visszatér igaz ha bármelyik másik adott Húrok meccs az első ellen Húr eset érzékenyen.

Ellenkező esetben hamis értéket adunk vissza:

assertThat (StringUtils.equalsAny (null, null, null)) .isTrue (); assertThat (StringUtils.equalsAny ("megegyezik bármelyikkel", "megegyezik bármelyikkel", "bármelyik")) .isTrue (); assertThat (StringUtils.equalsAny ("megegyezik bármelyikkel", null, "megegyezik bármelyikkel")) .isTrue (); assertThat (StringUtils.equalsAny (null, "egyenlő", "bármilyen")) .isFalse (); assertThat (StringUtils.equalsAny ("bármelyiknek megegyezik", "MINDEN EGYENLYEN", "BÁRMILYEN")) .isFalse ();

A equalsAnyIgnoreCase () módszer hasonlóan működik, mint a equalsAny () módszer, de figyelmen kívül hagyja a burkolatot is:

assertThat (StringUtils.equalsAnyIgnoreCase ("ignore case", "IGNORE CASE", "any")). isTrue ();

4.3. Használata összehasonlít () és CompareIgnoreCase ()

A összehasonlít () módszer ben StringUtils osztály egy null-biztonságos változata összehasonlítani() a metódusa Húr osztály és fogantyúk nulla értékeket figyelembe véve a nulla értéke kisebb, mint a nem semleges érték. Kettő nulla az értékeket egyenlőnek tekintjük.

Továbbá, ez a módszer használható a listák rendezésére Húrok val vel nulla bejegyzés:

assertThat (StringUtils.compare (null, null)) .isEqualTo (0); assertThat (StringUtils.compare (null, "abc")) .isEqualTo (-1); assertThat (StringUtils.compare ("abc", "bbc")) .isEqualTo (-1); assertThat (StringUtils.compare ("bbc", "abc")) .isEqualTo (1);

A CompareIgnoreCase () A módszer hasonlóan viselkedik, kivéve, ha figyelmen kívül hagyja a nagybetűket:

assertThat (StringUtils.compareIgnoreCase ("Abc", "bbc")) .isEqualTo (-1); assertThat (StringUtils.compareIgnoreCase ("bbc", "ABC")) .isEqualTo (1); assertThat (StringUtils.compareIgnoreCase ("abc", "ABC")) .isEqualTo (0);

A két módszer alkalmazható a-val is nullIsLess választási lehetőség. Ez harmadik logikai argumentum, amely eldönti, hogy a null értékeket kisebbnek kell-e tekinteni, vagy sem.

A nulla értéke alacsonyabb, mint egy másik Húr ha nullIsLess igaz és magasabb, ha nullIsLess hamis.

Próbáljuk ki:

assertThat (StringUtils.compare (null, "abc", true)) .isEqualTo (-1); assertThat (StringUtils.compare (null, "abc", hamis)) .isEqualTo (1);

A CompareIgnoreCase () módszer egy harmadikkal logikai érvelés hasonlóan működik, kivéve az eset figyelmen kívül hagyását.

5. Következtetés

Ebben a gyors bemutatóban az összehasonlítás különféle módjait vitattuk meg Húrok.

És mint mindig, a példák forráskódja megtalálható a GitHubon.