Trier une chaîne par ordre alphabétique en Java

1. Vue d'ensemble

Dans ce didacticiel, nous montrerons comment trier les chaînes par ordre alphabétique.

Il y a peut-être de nombreuses raisons pour lesquelles nous aimerions le faire - l'une d'entre elles pourrait être la validation si deux mots sont composés du même jeu de caractères. De cette façon, nous vérifierons s'il s'agit d'un anagramme.

2. Tri d'une chaîne

En interne, String utilise un tableau de caractères sur lequel opérer. Par conséquent, nous pouvons utiliser la méthode toCharArray (): char [] , trier le tableau et créer une nouvelle chaîne basée sur le résultat:

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

Dans Java 8, nous pouvons tirer parti de l' API Stream pour trier la chaîne pour nous:

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

Ici, nous utilisons le même algorithme que le premier exemple, mais en triant le tableau de caractères à l'aide de la méthode Stream sorted () .

Notez que les caractères sont triés selon leurs codes ASCII , par conséquent, les lettres majuscules apparaîtront toujours au début. Donc, si nous voulons trier «abC», le résultat du tri sera «Cab».

Pour le résoudre, nous devons transformer la chaîne avec la méthode toLowerCase () . Nous allons faire cela dans notre exemple de validateur Anagram.

3. Test

Pour tester le tri, nous allons construire le validateur d'anagrammes. Comme mentionné, un anagramme se produit lorsque deux mots ou phrases différents sont composés du même jeu de caractères.

Jetons un coup d'œil à notre 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+", ""); } }

Maintenant, nous allons utiliser notre méthode de tri et vérifier si l'anagramme est valide:

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

4. Conclusion

Dans cet article rapide, nous avons montré comment la chaîne peut être triée par ordre alphabétique de deux manières. De plus, nous avons implémenté le validateur d'anagrammes qui utilisait la méthode de tri des chaînes.

Comme d'habitude, le code complet est disponible sur le projet GitHub.