Ordenando cadenas en Java usando Arrays.sort()

JavaBeginner
Practicar Ahora

Introducción

En Java, no hay un solo método dentro de la clase String para fines de clasificación. Sin embargo, podemos aprovechar el hecho de que una matriz de caracteres se puede ordenar fácilmente utilizando varios algoritmos. Hay múltiples maneras de ordenar cadenas en Java, como utilizar Arrays.sort(), Comparator en Arrays.sort(), o algoritmos de clasificación comúnmente utilizados como Selection Sort y Bubble Sort. En este laboratorio, exploraremos cómo ordenar una cadena en Java utilizando el método Arrays.sort().

Escribe el código

En este paso, escribiremos el programa Java para ordenar una cadena utilizando la función Arrays.sort(). El código toma una cadena de entrada, la convierte en una matriz de caracteres, ordena la matriz utilizando la función Arrays.sort() y luego la convierte de nuevo en una cadena.

import java.util.Arrays;

public class SortString {
    public static void main(String[] args) {
        String originalString = "The quick brown fox jumps over the lazy dog";
        String sortedString = "";
        char[] tempArr = originalString.toCharArray();   // convert string to character array
        Arrays.sort(tempArr);   // sort character array
        sortedString = new String(tempArr);   // convert sorted character array to a string
        System.out.println("Original String: " + originalString);
        System.out.println("Sorted String: " + sortedString);
    }
}

Compila y ejecuta el código

Abre la terminal y navega hasta el directorio ~/project. Compila el programa Java utilizando el siguiente comando:

javac SortString.java

Ejecuta el programa Java utilizando el siguiente comando:

java SortString

La salida del programa será:

Original String: The quick brown fox jumps over the lazy dog
Sorted String:    Tabcdeeefghhijklmnoooopqrrstuuvwxyz

Implementar la clasificación sin distinción de mayúsculas y minúsculas

En Java, el método Arrays.sort() compara los caracteres utilizando sus valores Unicode. Para ordenar una cadena sin tener en cuenta la sensibilidad a las mayúsculas y minúsculas, podemos modificar el algoritmo de clasificación utilizando un Comparator. En este paso, editaremos nuestro código Java anterior para ordenar la cadena sin tener en cuenta la casilla.

import java.util.Arrays;
import java.util.Comparator;

public class SortString {
    public static void main(String[] args) {
        String originalString = "The quick brown fox jumps over the lazy dog";
        String sortedString = "";
        Character[] tempArr = toCharacterArray(originalString.toLowerCase());   // convert lowercase string to Character array
        Arrays.sort(tempArr, new Comparator<Character>() {   // sort with case-insensitive comparator
            @Override
            public int compare(Character c1, Character c2) {
                return c1.compareTo(c2);
            }
        });
        StringBuilder sb = new StringBuilder(tempArr.length);   // create a StringBuilder object
        for (Character c : tempArr) {
            sb.append(c.charValue());   // add sorted characters to the StringBuilder object
        }
        sortedString = sb.toString();   // convert StringBuilder object to a string
        System.out.println("Original String: " + originalString);
        System.out.println("Sorted String: " + sortedString);
    }

    // method to convert a string to Character array
    private static Character[] toCharacterArray(String str) {
        Character[] arr = new Character[str.length()];
        for (int i = 0; i < str.length(); i++) {
            arr[i] = str.charAt(i);
        }
        return arr;
    }
}

Compila y ejecuta el código actualizado

Compila el programa Java actualizado utilizando el siguiente comando:

javac SortString.java

Ejecuta el programa Java utilizando el siguiente comando:

java SortString

La salida del programa será:

Original String: The quick brown fox jumps over the lazy dog
Sorted String:    abcdeeefghhijklmnoooopqrrsttuuvwxyz

Implementar la clasificación utilizando el método tradicional

En este paso, implementaremos la clasificación en una matriz de caracteres utilizando un método tradicional de bucles anidados. El algoritmo comparará cada carácter con los caracteres a su derecha y cambiará de lugar los caracteres si el carácter de la derecha es menor que el carácter actual.

import java.util.Arrays;

public class SortString {
    public static void main(String[] args) {
        String originalString = "The quick brown fox jumps over the lazy dog";
        String sortedString = "";
        char[] tempArr = originalString.toCharArray();   // convert string to character array
        int n = tempArr.length;
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                if (tempArr[i] > tempArr[j]) {
                    char temp = tempArr[i];
                    tempArr[i] = tempArr[j];
                    tempArr[j] = temp;
                }
            }
        }
        sortedString = new String(tempArr);   // convert sorted character array to a string
        System.out.println("Original String: " + originalString);
        System.out.println("Sorted String: " + sortedString);
    }
}

Compila y ejecuta el código actualizado

Compila el programa Java actualizado utilizando el comando anterior:

javac SortString.java

Ejecuta el programa Java utilizando el siguiente comando:

java SortString

La salida del programa será:

Original String: The quick brown fox jumps over the lazy dog
Sorted String:    Tabcdeeefghhijklmnoooopqrrstuuvwxyz

Resumen

En este laboratorio, aprendimos cómo ordenar una cadena en Java utilizando el método Arrays.sort(). También aprendimos cómo implementar la clasificación sin distinción de mayúsculas y minúsculas utilizando Comparator y la clasificación tradicional utilizando bucles anidados.