Home » Core Java » lang » String » Java String reverse Example

About Nikos Maravitsas

Nikos Maravitsas
Nikos has graduated from the Department of Informatics and Telecommunications of The National and Kapodistrian University of Athens. During his studies he discovered his interests about software development and he has successfully completed numerous assignments in a variety of fields. Currently, his main interests are system’s security, parallel systems, artificial intelligence, operating systems, system programming, telecommunications, web applications, human – machine interaction and mobile development.

Java String reverse Example

In this example we are going to see how to reverse a String in Java. We are going to see how to this, very conveniently using a StringBuffer, and two other solutions using recursion and simply using a character array.

Let’s see the examples.

1. Reversing a String using StringBuffer

Let’s see how you can use a StringBuffer to reverse a String in a single line, using its reverse API method:
 

StringReverseExample.java:

package com.javacodegeeks.core.string;

public class StringReverseExample {

	public static void main(String[] args) {

		String str = "This was a String to reverse";

		String reverse = new StringBuffer(str).reverse().toString();

		System.out.println("Normal String is : " + str + " \nReverse String is : "+reverse);
	}
}

This will output:

Normal String is : This was a String to reverse 
Reverse String is : esrever ot gnirtS a saw sihT

This is the easiest way you can reverse a String in Java.

2. Reversing a String using iteration through characters

In this case we are first going to obtain a character array from the String in order to handle its characters individually. Then, we can either choose to create another array of the same length and simply copy the last character of the first array to first character of the second, then the second to last character of the first array to the second character of the second e.t.c. Another way would be to swap the characters in place in the same array.

Let’s see how :

StringReverseExample.java:

package com.javacodegeeks.core.string;

public class StringReverseExample {

	public static void main(String[] args) {

		String str = "This was a String to reverse";

		char[] characters = str.toCharArray();
		char[] reverseChars = new char[characters.length];

		for( int i = 0 ; i < characters.length  ; i++){
			reverseChars[i] = characters[(characters.length-1)-i];	
		}

		String reverse = new String(reverseChars);
		System.out.println("Normal String is : " + str + " \nReverse String is : "+reverse);

		// If you don't want to use double the memory
		// swap the characters in place
		for( int i = 0 ; i < characters.length/2  ; i++){
			char t = characters[i];
			characters[i] = characters[(characters.length-1)-i];
			characters[(characters.length-1)-i] = t;
		}

		System.out.println("Normal String is : " + str + " \nReverse String is : "+String.valueOf(characters));
	}
}

This will output:

Normal String is : This was a String to reverse 
Reverse String is : esrever ot gnirtS a saw sihT
Normal String is : This was a String to reverse 
Reverse String is : esrever ot gnirtS a saw sihT

3. Reversing a String using recursion

This is how you can use recursion to compute the reverse of String:

StringReverseExample.java:

package com.javacodegeeks.core.string;

public class StringReverseExample {

	public static void main(String[] args) {

		String str = "Java";
		String reverseStr = reverseRecurive(str);
		System.out.println("Normal String is : " + str + " \nReverse String is : "+reverseStr);     
	}

	public static String reverseRecurive(String str) {

        if (str.length() <= 1) {
            return str;
        }

        return reverseRecurive(str.substring(1)) + str.charAt(0);

    }
}

This will output:

Normal String is : Java
Reverse String is : avaJ

At first sight, the above recursive algorithm, might not be straight forward. Let’s see how this works. We can model the recursive calls like this

  • 1st callreverseRecurive("Java") : will return reverseRecurive("ava") + "J"
  • 2nd callreverseRecurive("ava") : will return reverseRecurive("va") + "a"
  • 3rd call – reverseRecurive("va") : will return reverseRecurive("a") + "v"
  • 4th callreverseRecurive("a") : will return "a"
  • 3rd call – will return : reverseRecurive("a")  + “v” =  “a” + “v”
  • 2nd call – will return : reverseRecurive("va") + “a” = “a” + “v” + “a”
  • 1st call – will return  : reverseRecurive("ava") + “J” = “a” + “v” + “a” + “J”

That should make it a bit more clear. As you can see, in this example the depth of the recursion is equal to the length of the String. If the String is very long and stack size is of major concern, Divide and Conquer is the way to go :

StringReverseExample.java:

package com.javacodegeeks.core.string;

public class StringReverseExample {

	public static void main(String[] args) {

		String str = "Hello World";

		String reverseStr = reverseRecursiveDivide(str);
		System.out.println("Normal String is : " + str
				+ " \nReverse String is : " + reverseStr);
	}


	public static String reverseRecursiveDivide(String str) {
		if (str.length() <= 1) {
			return str;
		}

		return reverseRecursiveDivide(str.substring(str.length() / 2, str.length())) + reverseRecursiveDivide(str.substring(0, str.length() / 2));
	}
}

This will output:

Normal String is : Hello World 
Reverse String is : dlroW olleH

The logic here is that you take the first half of the String, you reverse it, take the other half of the String and reverse it, and finally concatenate them with the reverse order ( reversed second half + reversed first half). And that's it.

To sum up, there is no particular reason why you shouldn't use the simple first method with StringBuffer. But if you don't want to do that, for example in an interview question, as you can see there are plenty of fast solutions.

Download Source Code

This was a Java String reverse Example. You can download the source code of this example here : StringReverseExample.zip

(No Ratings Yet)
Start the discussion Views Tweet it!

Do you want to know how to develop your skillset to become a Java Rockstar?

Subscribe to our newsletter to start Rocking right now!

To get you started we give you our best selling eBooks for FREE!

 

1. JPA Mini Book

2. JVM Troubleshooting Guide

3. JUnit Tutorial for Unit Testing

4. Java Annotations Tutorial

5. Java Interview Questions

6. Spring Interview Questions

7. Android UI Design

 

and many more ....

 

Receive Java & Developer job alerts in your Area

 

Leave a Reply

avatar
  Subscribe  
Notify of