Como reverter uma string em Java

Como reverter uma string em Java

1. Visão geral

Neste tutorial rápido, veremoshow we can reverse a String in Java.

Vamos começar a fazer esse processamento usando soluções Java simples. A seguir, daremos uma olhada nas opções que as bibliotecas de terceiros, como o Apache Commons, oferecem.

Além disso, demonstraremoshow to reverse the order of words in a sentence.

2. Um loop tradicional defor

Sabemos que as strings sãoimmutable in Java. Um objeto imutável é um objeto cujointernal state remains constant depois de ter sido totalmente criado.

Portanto, não podemos reverter aString modificando-o. Precisamos criar outroString por esse motivo.

Primeiro, vamos ver um exemplo básico usando um loopfor. Vamos iterar a entradaString do último para o primeiro elemento e concatenar cada caractere em um novoString:

public String reverse(String input) {

    if (input == null) {
        return input;
    }

    String output = "";

    for (int i = input.length() - 1; i >= 0; i--) {
        output = output + input.charAt(i);
    }

    return output;
}

Como podemos ver, precisamos ter cuidado nos casos de canto e tratá-los separadamente.

Para entender melhor o exemplo, podemos construir um teste de unidade:

@Test
public void whenReverseIsCalled_ThenCorrectStringIsReturned() {
    String reversed = ReverseStringExamples.reverse("cat");
    String reversedNull = ReverseStringExamples.reverse(null);
    String reversedEmpty = ReverseStringExamples.reverse(StringUtils.EMPTY);

    assertEquals("tac", reversed);
    assertEquals(null, reversedNull);
    assertEquals(StringUtils.EMPTY, reversedEmpty);
}

3. AStringBuilder

Java também oferece alguns mecanismos comoStringBuilder and StringBuffer that create a mutable sequence of characters. Esses objetos possuem um métodoreverse() que nos ajuda a alcançar o resultado desejado.

Aqui, precisamos criar umStringBuilder a partir da entradaStringe chamar o métodoreverse():

public String reverseUsingStringBuilder(String input) {
    if (input == null) {
        return null;
    }

    StringBuilder output = new StringBuilder(input).reverse();
    return output.toString();
}

4. Apache Commons

Apache Commons é uma biblioteca Java popular com várias classes de utilitários, incluindo manipulação de strings.

Como de costume, para começar a usar o Apache Commons, primeiro precisamos adicionar oMaven dependency:


    org.apache.commons
    commons-lang3
    3.9

A classeStringUtils é o que precisamos aqui porque ela fornece o métodoreverse() semelhante aStringBuilder.

Uma vantagem de usar esta biblioteca é queits utility methods perform null-safe operations. Portanto, não temos que tratar os casos extremos separadamente.

Vamos criar um método que atenda ao nosso propósito e use a classeStringUtils:

public String reverseUsingApacheCommons(String input) {
    return StringUtils.reverse(input);
}

Agora, olhando para esses três métodos, podemos certamente dizer que o terceiro é a maneirasimplest and the least error-prone de reverter aString.

5. Invertendo a ordem das palavras em uma frase

Agora, vamos supor que temos uma frase com palavras separadas por espaços e sem sinais de pontuação. Precisamos reverter a ordem das palavras nesta frase.

Podemos resolver este problema em duas etapas:splitting the sentence pelo delimitador de espaço e depois concatenando as palavras na ordem inversa.

Primeiro, mostraremos uma abordagem clássica. Vamos usar o método String.split() para preencher a primeira parte do nosso problema. Em seguida, vamos iterar para trás através da matriz resultante e concatenar as palavras usando umStringBuilder. Obviamente, também precisamos adicionar um espaço entre estas palavras:

public String reverseTheOrderOfWords(String sentence) {
    if (sentence == null) {
        return null;
    }

    StringBuilder output = new StringBuilder();
    String[] words = sentence.split(" ");

    for (int i = words.length - 1; i >= 0; i--) {
        output.append(words[i]);
        output.append(" ");
    }

    return output.toString().trim();
}

Em segundo lugar, vamos considerar o uso da biblioteca Apache Commons. Once again, it helps us achieve a more readable and less error-prone code. Precisamos apenas chamar o métodoStringUtils.reverseDelimited() com a frase de entrada e o delimitador como argumentos:

public String reverseTheOrderOfWordsUsingApacheCommons(String sentence) {
    return StringUtils.reverseDelimited(sentence, ' ');
}

6. Conclusão

Neste tutorial, vimos primeiro diferentes maneiras de reverter aString em Java. Passamos por alguns exemplos usando o Java principal e também uma biblioteca de terceiros popular como o Apache Commons.

A seguir, vimos como inverter a ordem das palavras em uma frase em duas etapas. Essas etapas também podem ser úteis para obter outras permutações de uma frase.

Como de costume, todos os exemplos de código mostrados neste tutorial estão disponíveisover on GitHub.