Sortiranje niza po abecedi u Javi

1. Pregled

U ovom uputstvu pokazat ćemo kako se sortira Niz abecedno.

Moglo bi postojati puno razloga zašto bismo to željeli učiniti - jedan od njih mogao bi biti provjera valjanosti ako su dvije riječi sastavljene od istog skupa znakova. Na taj ćemo način provjeriti jesu li anagram.

2. Sortiranje niza

Interno, Niz koristi niz znakova za rad. Stoga možemo koristiti toCharArray (): char [] metodu, sortirajte niz i stvorite novi Niz na temelju rezultata:

@Test void givenString_whenSort_thenSorted () {Niz abcd = "bdca"; char [] znakovi = abcd.toCharArray (); Nizovi.sort (znakovi); Niz sortiran = novi niz (znakovi); assertThat (sorted) .isEqualTo ("abcd"); }

U Javi 8 možemo iskoristiti Stream API za sortiranje Niz za nas:

@Test void givenString_whenSortJava8_thenSorted () {String sorted = "bdca" .chars () .sorted () .collect (StringBuilder :: new, StringBuilder :: appendCodePoint, StringBuilder :: append) .toString (); assertThat (sorted) .isEqualTo ("abcd"); }

Ovdje koristimo isti algoritam kao i prvi primjer, ali sortiranje polja char pomoću Tok sortiran () metoda.

Primijetite, da likovi jesu poredano po ASCII kodovima, stoga će se velika slova uvijek pojavljivati ​​na početku. Dakle, ako želimo sortirati "abC", rezultat sortiranja bit će "Cab".

Da bismo to riješili, moramo transformirati niz sa toLowerCase () metoda. To ćemo učiniti u našem primjeru Anagram validatora.

3. Ispitivanje

Da bismo testirali sortiranje, izradit ćemo anagram validator. Kao što je spomenuto, anagram se događa kada su dvije različite riječi ili rečenice složene od istog skupa znakova.

Pogledajmo naše AnagramValidator razred:

javna klasa AnagramValidator {javni statički logički isValid (tekst niza, niz anagrama) {tekst = pripremiti (tekst); anagram = pripremiti (anagram); Niz sortedText = sortiraj (tekst); Niz sortedAnagram = sortiraj (anagram); vrati sortedText.equals (sortedAnagram); } privatna statička vrsta niza (tekst niza) {char [] znakovi = pripremiti (tekst) .toCharArray (); Nizovi.sort (znakovi); vrati novi niz (znakovi); } privatna statička priprema stringa (tekst niza) {return text.toLowerCase () .trim () .replaceAll ("\ s +", ""); }}

Sada ćemo se poslužiti našom metodom sortiranja i provjeriti je li anagram valjan:

@Test void givenValidAnagrams_whenSorted_thenEqual () {boolean isValidAnagram = AnagramValidator.isValid ("Avida dolari", "Salvador Dali"); assertTrue (isValidAnagram); }

4. Zaključak

U ovom kratkom članku pokazali smo kako Niz može se poredati po abecednom redu na dva načina. Također, implementirali smo alat za provjeru valjanosti anagrama koji je koristio metodu sortiranja nizova.

Kao i obično, cjeloviti kôd dostupan je na projektu GitHub.