Sortering af en streng alfabetisk i Java

1. Oversigt

I denne vejledning viser vi, hvordan man sorterer Snor alfabetisk.

Der kan være masser af grunde til, at vi gerne vil gøre det - en af ​​dem kan være validering, hvis to ord er sammensat af de samme tegnsæt. På den måde kontrollerer vi, om de er et anagram.

2. Sortering af en streng

Internt, Snor bruger en række tegn til at operere på. Derfor kan vi gøre brug af toCharArray (): char [] metode, sorterer arrayet og opretter et nyt Snor baseret på resultatet:

@Test ugyldigt givenString_whenSort_thenSorted () {String abcd = "bdca"; char [] tegn = abcd.toCharArray (); Arrays.sort (tegn); Streng sorteret = ny streng (tegn); assertThat (sorteret) .isEqualTo ("abcd"); }

I Java 8 kan vi udnytte Strøm API til at sortere Snor for os:

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

Her bruger vi den samme algoritme som det første eksempel, men sorterer char-arrayet ved hjælp af Stream sorteret () metode.

Bemærk, at tegn er sorteret efter dets ASCII-koderderfor vil store bogstaver altid forekomme i starten. Så hvis vi gerne vil sortere "abC", bliver resultatet af sorteringen "førerhus".

For at løse det skal vi transformer strengen med toLowerCase () metode. Vi skal gøre det i vores eksempel på Anagram-validator.

3. Testning

For at teste sortering bygger vi anagramvalidatoren. Som nævnt opstår et anagram, når to forskellige ord eller sætninger er sammensat af det samme sæt tegn.

Lad os se på vores AnagramValidator klasse:

public class AnagramValidator {public static boolean isValid (String text, String anagram) {text = prepare (text); anagram = forbered (anagram); String sortedText = sort (tekst); String sortedAnagram = sort (anagram); returner sortedText.equals (sortedAnagram); } privat statisk strengsortering (strengtekst) {char [] tegn = forbered (tekst) .toCharArray (); Arrays.sort (tegn); returner ny streng (tegn); } privat statisk strengforberedelse (strengtekst) {return text.toLowerCase () .trim () .replaceAll ("\ s +", ""); }}

Nu skal vi bruge vores sorteringsmetode og kontrollere, om anagrammet er gyldigt:

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

4. Konklusion

I denne hurtige artikel har vi vist, hvordan Snor kan sorteres i alfabetisk rækkefølge på to måder. Vi har også implementeret anagramvalidatoren, der benyttede strengsorteringsmetoden.

Som sædvanlig er den komplette kode tilgængelig på GitHub-projektet.