CodeGym /Blog Java /Random-ES /Invertir una cadena en Java
Autor
John Selawsky
Senior Java Developer and Tutor at LearningTree

Invertir una cadena en Java

Publicado en el grupo Random-ES

¿Qué es una cadena inversa?

“Comienza a leer una cadena desde el último carácter hasta el primer carácter. ¡Bingo! esa fue tu cuerda invertida".
Aquí hay una demostración de cómo se verá.

Input String = "X Y Z";
Output String = "Z Y X"

Input String = "1 2 3";
Output String = "3 2 1";

Input String = "I love Java!";
Output String = "!avaJ evol I";

¿Cómo invertir una cadena en Java?

Hay diferentes formas de invertir una cadena en Java. Sin embargo, Java no proporciona ningún método reverse() para la clase String . El enfoque ingenuo comienza con el uso de for loop. El procedimiento iterativo tradicional. Luego podemos construirlo usando los métodos reverse() ofrecidos por otras clases como StringBuilder y StringBuffer .

Método 1: la forma iterativa de la vieja escuela


public class StringReversal {

	public static String reverseInputString(String myString) {

		if (myString == null)
			return myString;

		String reverseString = "";

		for (int i = myString.length() - 1; i >= 0; i--) {		

			reverseString = reverseString + myString.charAt(i);
		}
		return reverseString;
	}

	public static void main(String[] args) {

		String myString1 = "X Y Z";
		System.out.println("reverse(" + myString1 + ") = " + reverseInputString(myString1));

		String myString2 = "1 2 3";
		System.out.println("reverse(" + myString2 + ") = " + reverseInputString(myString2));

		String myString3 = "I LOVE JAVA!";
		System.out.println("reverse(" + myString3 + ") = " + reverseInputString(myString3));

		String myString4 = "My favourite place to learn Java is CodeGym.";
		System.out.println("reverse(" + myString4 + ") = " + reverseInputString(myString4));

		String myString5 = "My name is Lubaina Khan.";
		System.out.println("reverse(" + myString5 + ") = " + reverseInputString(myString5));
		
		// Boundary Case to see what happens if a String is null
		String myString6 = null;
		System.out.println("reverse(" + myString6 + ") = " + reverseInputString(myString6));
		
		// Boundary Case to see what happens if a String is empty
		String myString7 = "";
		System.out.println("reverse(" + myString7 + ") = " + reverseInputString(myString7));
	}
}

Producción

reverse(XYZ) = ZYX reverse(1 2 3) = 3 2 1 reverse(¡ME ENCANTA JAVA!) = !AVAJ EVOL I reverse(Mi lugar favorito para aprender Java es CodeGym.) = .myGedoC si avaJ nrael ot ecalp etiruovaf yM reverse(Mi nombre es Lubaina Khan.) = .nahK aniabuL si eman yM reverse(null) = null reverse() =

Explicación


public static String reverseInputString(String myString) { ... }
El método reverseInputString toma una cadena de entrada llamada myString .

if (myString == null)
	return myString;
Compruebe si la cadena de entrada, es decir, myString, es nula. Si se encuentra nulo, devuelve la entrada tal como está. No necesitamos avanzar más. Esto se denomina manejo de casos límite para evitar errores.

String reverseString = "";
Declare una cadena vacía para almacenar la salida.

for (int i = myString.length() - 1; i >= 0; i--) {		
	reverseString = reverseString + myString.charAt(i);
}
Usa un bucle for normal . Inicialice el iterador i desde el último índice de la cadena de entrada . Acceda al último índice de la cadena de entrada y guárdelo en la cadena de salida. Siga repitiendo hasta llegar al índice 0 o al comienzo de la cadena de entrada.

return reverseString;
Devuelva la cadena inversa y utilícela según sus requisitos.

Método 2: el uso de la clase String Builder

En Java, el contenido de un String una vez inicializado no se puede cambiar. Por lo tanto, no hay un método reverse() disponible para String s. Pero otras clases como StringBuilder y StringBuffer en Java contienen contenidos que son mutables o modificables. Para invertir una cadena sin bucles y usando la clase integrada StringBuilder o StringBuffer , veamos un ejemplo a continuación.

public class StringBuilderReversal {

	public static void main(String[] args) {

		String input1 = "A B C";
		StringBuilder inputText1 = new StringBuilder(input1);
		System.out.println("reverse(" + inputText1 + ") = " + inputText1.reverse());

		String input2 = "0 1 2 2 3 3 3";
		StringBuilder inputText2 = new StringBuilder(input2);
		System.out.println("reverse(" + inputText2 + ") = " + inputText2.reverse());

		String input3 = "Monday";
		StringBuilder inputText3 = new StringBuilder(input3);
		System.out.println("reverse(" + inputText3 + ") = " + inputText3.reverse());

		String input4 = "I love CodeGym!";
		StringBuilder inputText4 = new StringBuilder(input4);
		System.out.println("reverse(" + inputText4 + ") = " + inputText4.reverse());

		 // ReverseString using the StringBuilder class
		StringBuilder inputText5 = new StringBuilder("Reverse this String using StringBuilder Class.");
		System.out.println("reverse(" + inputText5 + ") = " + inputText5.reverse());

		 // ReverseString using the StringBuffer class
		StringBuffer inputText6 = new StringBuffer("Reverse this String using StringBuffer Class.");
		System.out.println("reverse(" + inputText6 + ") = " + inputText6.reverse());
	}
}

Producción

reverse(ABC) = CBA reverse(0 1 2 2 3 3 3) = 3 3 3 2 2 1 0 reverse(Lunes) = yadnoM reverse(¡Me encanta CodeGym!) = !myGedoC evol I reverse(Revierta esta cadena usando la clase StringBuilder .) = .ssalC redliuBgnirtS gnisu gnirtS siht esreveR reverse(Revierta esta cadena usando la clase StringBuffer.) = .ssalC reffuBgnirtS gnisu gnirtS siht esreveR

Explicación


String input1 = "A B C";
StringBuilder inputText1 = new StringBuilder(input1);
Para revertir la cadena de entrada , debe convertirla a StringBuilder . Para eso, pase la cadena de entrada al constructor StringBuilder .

System.out.println("reverse(" + inputText1 + ") = " + inputText1.reverse());
Después de convertir String a StringBuilder , puede obtener su reverso e imprimir la salida.

 // ReverseString using the StringBuffer class
StringBuffer inputText6 = new StringBuffer("Reverse this String using StringBuffer Class.");
Alternativamente, puede pasar un String directamente a StringBuilder o StringBuffer .

Conclusión

Al final de esta publicación, debe estar familiarizado con la inversión de Strings y cómo lograrlo usando otras clases de StringBuilder y StringBuffer. Puede elegir cualquier método según su conveniencia. Siéntete libre de subirte cuando te sientas atascado. Hasta entonces, sigue practicando y sigue brillando.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION