Usporedba žica u Javi

1. Pregled

U ovom ćemo članku govoriti o različitim načinima usporedbe Žice na Javi.

Kao Niz je jedan od najčešće korištenih tipova podataka u Javi, ovo je prirodno vrlo često korištena operacija.

2. Niz Usporedba s Niz Razred

2.1. Koristeći “==” Operator usporedbe

Korištenje operatora "==" za usporedbu tekstnih vrijednosti jedna je od najčešćih pogrešaka koje Java početnici čine. To je netočno jer “==” provjerava samo referentnu jednakost dvoje Žice, što znači da li upućuju na isti objekt ili ne.

Pogledajmo primjer takvog ponašanja:

Niz string1 = "pomoću operatora usporedbe"; Niz string2 = "pomoću operatora usporedbe"; String string3 = new String ("pomoću operatora usporedbe"); assertThat (string1 == string2) .isTrue (); assertThat (string1 == string3) .isFalse ();

U gornjem primjeru prva je tvrdnja istinita jer dvije varijable upućuju na isto Niz doslovno.

S druge strane, druga je tvrdnja lažna jer niz1 stvoren je s doslovnim i niz3 kreira se pomoću novi operator - stoga upućuju na različite objekte.

2.2. Koristeći jednako ()

The Niz klasa nadjačava jednako () naslijeđena od Objekt. Ova metoda uspoređuje dvije Žice znak za znakom, zanemarujući njihovu adresu.

Smatra ih jednakima ako su iste duljine i likovi su istim redoslijedom:

Niz string1 = "pomoću metode jednakih"; Niz string2 = "pomoću metode jednakih"; Niz string3 = "pomoću metode EQUALS"; String string4 = new String ("pomoću metode jednakih"); assertThat (string1.equals (string2)). isTrue (); assertThat (string1.equals (string4)). isTrue (); assertThat (string1.equals (null)). isFalse (); assertThat (string1.equals (string3)). isFalse ();

U ovom primjeru, niz1, niz2, i niz4 varijable su jednake jer imaju isti slučaj i vrijednost bez obzira na adresu.

Za niz3 metoda se vraća lažno, jer razlikuje velika i mala slova.

Također, ako je bilo koji od dva niza null, tada se metoda vraća lažno.

2.3. Koristeći equalsIgnoreCase ()

The equalsIgnoreCase () metoda vraća logičku vrijednost. Kao što ime sugerira ovu metodu zanemaruje mala i mala slova u usporedbi Žice:

Niz string1 = "koristeći jednako zanemarivanje slučaja"; String string2 = "KORIŠTENJE JEDNAKIH IGNORE SLUČAJA"; assertThat (string1.equalsIgnoreCase (string2)). isTrue ();

2.4. Koristeći compareTo ()

The compareTo () metoda vraća an int vrijednost tipa i uspoređuje dvije Žice lik po lik leksikografski na temelju rječnika ili prirodnog poredaka.

Ova metoda vraća 0 ako je dva Žice su jednaki ili ako su oba null, negativan broj ako je prvi Niz dolazi ispred argumenta i broj veći od nule ako je prvi Niz dolazi nakon svađe Niz.

Pogledajmo primjer:

Autor niza = "autor"; String book = "knjiga"; String duplicateBook = "knjiga"; assertThat (author.compareTo (knjiga)) .isEqualTo (-1); assertThat (book.compareTo (autor)) .isEqualTo (1); assertThat (duplicateBook.compareTo (knjiga)) .isEqualTo (0);

2.5. Koristeći compareToIgnoreCase ()

The compareToIgnoreCase () sličan je prethodnoj metodi, osim što zanemaruje slučaj:

Autor niza = "Autor"; String book = "knjiga"; String duplicateBook = "KNJIGA"; assertThat (author.compareToIgnoreCase (knjiga)) .isEqualTo (-1); assertThat (book.compareToIgnoreCase (autor)) .isEqualTo (1); assertThat (duplicateBook.compareToIgnoreCase (knjiga)) .isEqualTo (0);

3. Niz Usporedba s Predmeti Razred

Predmeti je klasa korisnosti koja sadrži statički jednako () metoda, korisna u ovom scenariju - za usporedbu dviju Žice.

Metoda se vraća pravi ako dvije Žice jednaki su po prvi uspoređujući ih pomoću njihove adrese tj. "==”. Slijedom toga, ako su oba argumenta null, vraća se pravi a ako je točno jedan argument null, vraća se false.

U suprotnom, onda jednostavno poziva jednako () metoda klase tipa prosljeđenog argumenta - što je u našem slučaju Gudački razred jednako () metoda. Ova metoda razlikuje velika i mala slova jer interno poziva Niz razredu jednako () metoda.

Isprobajmo ovo:

Niz string1 = "upotreba objekata jednako"; Niz string2 = "upotreba objekata jednako"; String string3 = new String ("korištenje objekata jednako"); assertThat (Objects.equals (string1, string2)). isTrue (); assertThat (Objects.equals (string1, string3)). isTrue (); assertThat (Objects.equals (null, null)). isTrue (); assertThat (Objects.equals (null, string1)). isFalse ();

4. Niz Usporedba s Apache Commons

Biblioteka Apache Commons sadrži klasu korisnih programa nazvanu StringUtils za Niz-povezane operacije; ovo također ima neke vrlo korisne metode za Niz usporedba.

4.1. Koristeći jednako () i equalsIgnoreCase ()

The jednako () metoda StringUtils razred je poboljšana verzija Niz razredna metoda jednako (), koji također obrađuje null vrijednosti:

assertThat (StringUtils.equals (null, null)) .isTrue (); assertThat (StringUtils.equals (null, "jednaka metoda")) .isFalse (); assertThat (StringUtils.equals ("metoda jednaka", "metoda jednaka")) .isTrue (); assertThat (StringUtils.equals ("metoda jednaka", "METODA JEDNAKIH")) .isFalse ();

The equalsIgnoreCase () metoda StringUtils vraća a boolean vrijednost. Ovo djeluje slično kao jednako (), osim što zanemaruje velika slova u Žice:

assertThat (StringUtils.equalsIgnoreCase ("metoda jednaka", "metoda jednaka")) .isTrue (); assertThat (StringUtils.equalsIgnoreCase ("metoda jednaka", "METODA JEDNAKIH")) .isTrue ();

4.2. Koristeći equalsAny () i equalsAnyIgnoreCase ()

The equalsAny () prvi argument metode je a Niz a drugi je tip više argumenata CharSequence. Metoda se vraća pravi ako bilo koji od ostalih danih Žice meč protiv prvog Niz velika i mala slova.

U suprotnom, vraća se false:

assertThat (StringUtils.equalsAny (null, null, null)) .isTrue (); assertThat (StringUtils.equalsAny ("jednako je bilo kojem", "jednako je bilo kojem", "bilo kojem")) .isTrue (); assertThat (StringUtils.equalsAny ("jednak bilo kojem", null, "jednak bilo kojem")) .isTrue (); assertThat (StringUtils.equalsAny (null, "jednako", "bilo koji")) .isFalse (); assertThat (StringUtils.equalsAny ("jednako je bilo kojem", "JEDNAKO JE JEDNAKO", "BILO KOJE")) .isFalse ();

The equalsAnyIgnoreCase () metoda djeluje slično kao equalsAny () metoda, ali također zanemaruje kućište:

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

4.3. Koristeći usporedi () i compareIgnoreCase ()

The usporedi () metoda u StringUtils razred je a nul-sigurna verzija compareTo () metoda Niz razred i ručke null vrijednosti po s obzirom na a null vrijednost manja od a ne-null vrijednost. Dva null vrijednosti se smatraju jednakim.

Nadalje, ovom se metodom može sortirati popis Žice s null unosi:

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

The compareIgnoreCase () metoda se ponaša slično, osim što ignorira kućište:

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

Dvije metode mogu se koristiti i sa nullIsLess opcija. Ovo je treći boolean argument koji odlučuje hoće li se vrijednosti nule smatrati manjima ili ne.

A null vrijednost je niža od druge Niz ako nullIsLess je istina i viša ako nullIsLess je lažno.

Isprobajmo:

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

The compareIgnoreCase () metoda s trećim boolean argumenti rade slično, osim ignoriranjem slučaja.

5. Zaključak

U ovom smo brzom vodiču razgovarali o različitim načinima usporedbe Žice.

Kao i uvijek, izvorni kod za primjere možete pronaći na GitHubu.