Cómo invertir una cadena en Java

1. Información general

En este tutorial rápido, veremos cómo podemos revertir una cadena en Java.

Comenzaremos a hacer este procesamiento usando soluciones simples de Java. A continuación, veremos las opciones que brindan las bibliotecas de terceros como Apache Commons.

Además, demostraremos cómo invertir el orden de las palabras en una oración .

2. Un bucle tradicional para

Sabemos que las cadenas son inmutables en Java. Un objeto inmutable es un objeto cuyo estado interno permanece constante después de haber sido creado por completo.

Por lo tanto, no podemos revertir una Cadena modificándola. Necesitamos crear otro String por este motivo.

Primero, veamos un ejemplo básico usando un bucle for . Vamos a iterar sobre la entrada de String desde el último hasta el primer elemento y concatenar cada carácter en una nueva String :

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, debemos tener cuidado en los casos de esquina y tratarlos por separado.

Para comprender mejor el ejemplo, podemos construir una prueba unitaria:

@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. Un StringBuilder

Java también ofrece algunos mecanismos como StringBuilder y StringBuffer que crean una secuencia mutable de caracteres . Estos objetos tienen un método reverse () que nos ayuda a lograr el resultado deseado.

Aquí, necesitamos crear un StringBuilder a partir de la entrada String y luego llamar al método reverse () :

public String reverseUsingStringBuilder(String input) { if (input == null) { return null; } StringBuilder output = new StringBuilder(input).reverse(); return output.toString(); }

4. Apache Commons

Apache Commons es una biblioteca Java popular con muchas clases de utilidad, incluida la manipulación de cadenas.

Como de costumbre, para comenzar a usar Apache Commons, primero debemos agregar la dependencia de Maven:

 org.apache.commons commons-lang3 3.9 

La clase StringUtils es lo que necesitamos aquí porque proporciona el método reverse () similar a StringBuilder .

Una ventaja de usar esta biblioteca es que sus métodos de utilidad realizan operaciones nulas seguras . Por lo tanto, no tenemos que tratar los casos extremos por separado.

Creemos un método que cumpla con nuestro propósito y use la clase StringUtils :

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

Ahora, mirando estos tres métodos, ciertamente podemos decir que el tercero es la forma más simple y menos propensa a errores de invertir una cadena .

5. Invertir el orden de las palabras en una oración

Ahora, supongamos que tenemos una oración con palabras separadas por espacios y sin signos de puntuación. Necesitamos invertir el orden de las palabras en esta oración.

Podemos resolver este problema en dos pasos: dividir la oración por el delimitador de espacio y luego concatenar las palabras en orden inverso.

Primero, mostraremos un enfoque clásico. Usaremos el método S tring.split () para cumplir con la primera parte de nuestro problema. A continuación, iteraremos hacia atrás a través de la matriz resultante y concatenaremos las palabras usando un StringBuilder . Por supuesto, también necesitamos agregar un espacio entre estas palabras:

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

En segundo lugar, consideraremos utilizar la biblioteca Apache Commons. Una vez más, nos ayuda a lograr un código más legible y menos propenso a errores. Solo necesitamos llamar al método StringUtils.reverseDelimited () con la oración de entrada y el delimitador como argumentos:

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

6. Conclusión

En este tutorial, primero analizamos diferentes formas de revertir una cadena en Java. Revisamos algunos ejemplos usando el núcleo de Java, así como también usamos una biblioteca de terceros popular como Apache Commons.

A continuación, hemos visto cómo invertir el orden de las palabras en una oración en dos pasos. Estos pasos también pueden ser útiles para lograr otras permutaciones de una oración.

Como de costumbre, todos los ejemplos de código que se muestran en este tutorial están disponibles en GitHub.