Ordenar una cadena alfabéticamente en Java

1. Información general

En este tutorial, mostraremos cómo ordenar cadenas alfabéticamente.

Puede haber muchas razones por las que nos gustaría hacerlo: una de ellas podría ser la validación si dos palabras están compuestas por el mismo conjunto de caracteres. De esa forma, verificaremos si son anagramas.

2. Ordenar una cadena

Internamente, String usa una matriz de caracteres para operar. Por lo tanto, podemos hacer uso del método toCharArray (): char [] , ordenar la matriz y crear una nueva cadena basada en el resultado:

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

En Java 8, podemos aprovechar la API Stream para ordenar la cadena por nosotros:

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

Aquí, estamos usando el mismo algoritmo que en el primer ejemplo, pero ordenando la matriz de caracteres usando el método Stream sorted () .

Tenga en cuenta que los caracteres están ordenados por sus códigos ASCII , por lo tanto, las letras mayúsculas siempre aparecerán al principio. Entonces, si quisiéramos ordenar "abC", el resultado de la ordenación será "Cab".

Para resolverlo, necesitamos transformar la cadena con el método toLowerCase () . Vamos a hacer eso en nuestro ejemplo de validación de anagramas.

3. Prueba

Para probar la clasificación, crearemos el validador de anagramas. Como se mencionó, un anagrama ocurre cuando dos palabras u oraciones diferentes están compuestas por el mismo conjunto de caracteres.

Echemos un vistazo a nuestra clase 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+", ""); } }

Ahora, usaremos nuestro método de clasificación y verificaremos si el anagrama es válido:

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

4. Conclusión

En este artículo rápido, hemos mostrado cómo la Cadena se puede ordenar en orden alfabético de dos maneras. Además, hemos implementado el validador de anagramas que hizo uso del método de clasificación de cadenas.

Como de costumbre, el código completo está disponible en el proyecto GitHub.