Sortere en streng alfabetisk i Java

1. Oversikt

I denne opplæringen viser vi hvordan du sorterer String alfabetisk.

Det kan være mange grunner til at vi vil gjøre det - en av dem kan være validering hvis to ord består av de samme tegnsettene. På den måten vil vi verifisere om de er et anagram.

2. Sortere en streng

Internt, String bruker en rekke tegn å operere på. Derfor kan vi benytte oss av toCharArray (): char [] metode, sorterer matrisen og oppretter en ny String basert på resultatet:

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

I Java 8 kan vi utnytte Strøm API for å sortere String for oss:

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

Her bruker vi den samme algoritmen som det første eksemplet, men sorterer char-arrayet ved hjelp av Strøm sortert () metode.

Legg merke til at tegn er sortert etter ASCII-kodeneDerfor vil store bokstaver alltid forekomme i begynnelsen. Så hvis vi ønsker å sortere “abC” blir resultatet av sortering “Førerhus”.

For å løse det, må vi transformer strengen med toLowerCase () metode. Vi skal gjøre det i vårt eksempel på Anagram-validator.

3. Testing

For å teste sortering bygger vi anagramvalidatoren. Som nevnt oppstår et anagram når to forskjellige ord eller setninger er sammensatt av samme sett med tegn.

La oss ta en titt på vår AnagramValidator klasse:

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

Nå skal vi bruke vår sorteringsmetode og kontrollere om anagrammet er gyldig:

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

4. Konklusjon

I denne raske artikkelen har vi vist hvordan String kan sorteres i alfabetisk rekkefølge på to måter. Vi har også implementert anagramvalidatoren som brukte strengsorteringsmetoden.

Som vanlig er den komplette koden tilgjengelig på GitHub-prosjektet.