Trier une chaîne alphabétiquement en Java

Tri alphabétique d'une chaîne en Java

1. Vue d'ensemble

Dans ce didacticiel, nous allons montrer comment trier lesString 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 lestoCharArray() : char[] method, sort the array and create a new String based on the result:

@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'APIStream pour trier lesString 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 nous trions le tableau de caractères à l'aide de la méthodeStream sorted().

Notez que les caractères sont dessorted by its ASCII codes, 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 devonstransform the string with toLowerCase() method. Nous allons le faire dans notre exemple de validateur Anagram.

3. Essai

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

Jetons un œil à notre classeAnagramValidator:

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 lesString peuvent être triés 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 lesGithub project.