Ordinamento alfabetico di una stringa in Java

1. Panoramica

In questo tutorial, mostreremo come ordinare la stringa in ordine alfabetico.

Potrebbero esserci molte ragioni per cui vorremmo farlo: una di queste potrebbe essere la convalida se due parole sono composte dallo stesso set di caratteri. In questo modo, verificheremo se sono un anagramma.

2. Ordinamento di una stringa

Internamente, String utilizza un array di caratteri su cui operare. Pertanto, possiamo utilizzare il metodo toCharArray (): char [] , ordinare l'array e creare una nuova stringa in base al risultato:

@Test void givenString_whenSort_thenSorted() { String abcd = "bdca"; char[] chars = abcd.toCharArray(); Arrays.sort(chars); String sorted = new String(chars); assertThat(sorted).isEqualTo("abcd"); }

In Java 8, possiamo sfruttare l' API Stream per ordinare la stringa per noi:

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

Qui, stiamo usando lo stesso algoritmo del primo esempio, ma ordiniamo l'array di caratteri usando il metodo Stream Sort () .

Si noti che i caratteri sono ordinati in base ai codici ASCII , quindi le lettere maiuscole saranno sempre presenti all'inizio. Quindi, se vogliamo ordinare "abC", il risultato dell'ordinamento sarà "Cab".

Per risolverlo, dobbiamo trasformare la stringa con il metodo toLowerCase () . Lo faremo nel nostro esempio di convalida di Anagram.

3. Test

Per testare l'ordinamento, costruiremo il validatore di anagrammi. Come accennato, un anagramma si verifica quando due parole o frasi diverse sono composte dello stesso insieme di caratteri.

Diamo un'occhiata alla nostra classe AnagramValidator :

public class AnagramValidator { public static boolean isValid(String text, String anagram) { text = prepare(text); anagram = prepare(anagram); String sortedText = sort(text); String sortedAnagram = sort(anagram); return sortedText.equals(sortedAnagram); } private static String sort(String text) { char[] chars = prepare(text).toCharArray(); Arrays.sort(chars); return new String(chars); } private static String prepare(String text) { return text.toLowerCase() .trim() .replaceAll("\\s+", ""); } }

Ora utilizzeremo il nostro metodo di ordinamento e verificheremo se l'anagramma è valido:

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

4. Conclusione

In questo rapido articolo, abbiamo mostrato come la stringa potrebbe essere ordinata in ordine alfabetico in due modi. Inoltre, abbiamo implementato il validatore di anagrammi che utilizzava il metodo di ordinamento delle stringhe.

Come al solito, il codice completo è disponibile nel progetto GitHub.