Triedenie reťazca podľa abecedy v Jave

1. Prehľad

V tomto tutoriáli si ukážeme, ako triediť String abecedne.

Môže existovať veľa dôvodov, prečo by sme to chceli urobiť - jedným z nich by mohlo byť overenie, ak sú dve slová zložené z tej istej znakovej sady. Týmto spôsobom overíme, či ide o anagram.

2. Triedenie reťazca

Interne, String používa na prácu pole znakov. Preto môžeme využiť toCharArray (): char [] metódou, usporiadajte pole a vytvorte nový String na základe výsledku:

@Test void givenString_whenSort_thenSorted () {String abcd = "bdca"; char [] chars = abcd.toCharArray (); Array.sort (znaky); Reťazec zoradený = nový Reťazec (znaky); assertThat (zoradené) .isEqualTo ("abcd"); }

V prostredí Java 8 môžeme využiť Prúd API na triedenie String pre nás:

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

Tu používame rovnaký algoritmus ako v prvom príklade, ale triedenie char poľa pomocou Stream zoradený () metóda.

Všimnite si, že znaky sú zoradené podľa kódov ASCII, preto sa veľké písmená objavia vždy na začiatku. Ak by sme teda chceli triediť „abC“, výsledkom triedenia bude „Cab“.

Aby sme to vyriešili, musíme transformujte reťazec pomocou toLowerCase () metóda. Urobíme to v našom príklade validátora Anagram.

3. Testovanie

Na vyskúšanie triedenia zostavíme validátor anagramu. Ako už bolo spomenuté, k anagramu dôjde, keď sú dve rôzne slová alebo vety zložené z tej istej sady znakov.

Pozrime sa na našu AnagramValidator trieda:

public class AnagramValidator {public static boolean isValid (String text, String anagram) {text = prepare (text); anagram = pripraviť (anagram); Reťazec triedenýText = radiť (text); Reťazec triedenýAnagram = triediť (anagram); návrat triedenýText.ekvály (triedenýAnagram); } private static String sort (String text) {char [] chars = prepare (text) .toCharArray (); Array.sort (znaky); vrátiť nový reťazec (znaky); } private static String prepare (text reťazca) {return text.toLowerCase () .trim () .replaceAll ("\ s +", ""); }}

Teraz použijeme našu metódu triedenia a overíme, či je anagram platný:

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

4. Záver

V tomto rýchlom článku sme si ukázali, ako String môžu byť zoradené v abecednom poradí dvoma spôsobmi. Implementovali sme tiež overovač anagramov, ktorý využíval metódu triedenia reťazcov.

Kompletný kód je ako obvykle k dispozícii v projekte GitHub.