Ordenando Strings em Java usando Arrays.sort()

JavaBeginner
Pratique Agora

Introdução

Em Java, não existe um único método dentro da classe String para fins de ordenação. No entanto, podemos utilizar o fato de que um array de caracteres pode ser facilmente ordenado usando vários algoritmos. Existem múltiplas maneiras de ordenar strings em Java, como usar Arrays.sort(), Comparator em Arrays.sort(), ou algoritmos de ordenação comumente usados como Selection Sort e Bubble Sort. Neste laboratório, exploraremos como ordenar uma string em Java usando o método Arrays.sort().

Escreva o código

Nesta etapa, escreveremos o programa Java para ordenar uma string usando a função Arrays.sort(). O código recebe uma string de entrada, converte-a em um array de caracteres, ordena o array usando a função Arrays.sort() e, em seguida, converte-o de volta para uma string.

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);
    }
}

Compile e execute o código

Abra o terminal e navegue até o diretório ~/project. Compile o programa Java usando o seguinte comando:

javac SortString.java

Execute o programa Java usando o seguinte comando:

java SortString

A saída do programa será:

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

Implementar ordenação sem distinção entre maiúsculas e minúsculas

Em Java, o método Arrays.sort() compara caracteres usando seus valores Unicode. Para ordenar uma string sem levar em consideração a sensibilidade a maiúsculas e minúsculas, podemos modificar o algoritmo de ordenação usando um Comparator. Nesta etapa, editaremos nosso código Java anterior para ordenar a string sem considerar o caso.

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;
    }
}

Compilar e executar o código atualizado

Compile o programa Java atualizado usando o seguinte comando:

javac SortString.java

Execute o programa Java usando o seguinte comando:

java SortString

A saída do programa será:

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

Implementar ordenação utilizando o método tradicional

Nesta etapa, implementaremos a ordenação em um array de caracteres usando um método tradicional de loop aninhado. O algoritmo comparará cada caractere com os caracteres à sua direita e trocará os caracteres se o caractere à direita for menor que o caractere atual.

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);
    }
}

Compilar e executar o código atualizado

Compile o programa Java atualizado usando o comando anterior:

javac SortString.java

Execute o programa Java usando o seguinte comando:

java SortString

A saída do programa será:

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

Resumo

Neste laboratório, aprendemos como ordenar uma string em Java usando o método Arrays.sort(). Também aprendemos como implementar a ordenação sem distinção entre maiúsculas e minúsculas (case-insensitive sorting) usando Comparator e a ordenação tradicional usando loops aninhados.