This example will show how to reverse a sequence of characters using java and apache commons. Reversing a string is a piece of logic used when determining if a phrase is a palindrome. For each snippet below, the set up method has created a String to represent a phrase of words and String to hold the characters of the phrase backwards.
Setup
private static final String PHRASE = "The dog barked at the mail man";
private static final String PHRASE_REVERSE = "nam liam eht ta dekrab god ehT";
Straight up Java
StringBuffer
This snippet will reverse a string using StringBuffer. We will create a StringBuffer by passing in a character sequence into the constructor then calling the reverse method which causes the characters to be returned in reverse order.
@Test
public void reverse_a_string_with_java () {
StringBuffer buffer = new StringBuffer(PHRASE);
String reversedString = buffer.reverse().toString();
assertEquals(PHRASE_REVERSE, reversedString);
}
Recursion
This snippet will show how to reverse a string using recursion. Effective Java Item 51 states beware the performance of string concatenation so be cautious when using this approach as it hasn't been tested with a large string which could lead to performance implications.
public String reverseString(String s){
if (s.length() == 0)
return s;
return reverseString(s.substring(1)) + s.charAt(0);
}
@Test
public void reverse_a_string_with_recurrsion () {
String reversedString = reverseString(PHRASE);
assertEquals(PHRASE_REVERSE, reversedString);
}
Reverse string using for loop
This snippet will show how reverse a String using a for loop. We will iterate over the phrase of words with a for loop in reverse order collecting each character into a StringBuffer.
@Test
public void reverse_string_for_loop() {
StringBuffer reverse = new StringBuffer();
for (int i = PHRASE.length() - 1; i >= 0; i--) {
reverse.append(PHRASE.charAt(i));
}
assertEquals(PHRASE_REVERSE, reverse.toString());
}
Apache Commons
Using a apache commons StringUtils class we will reverse a string. The underlying implementation is using a StringBuilder and calling the reverse function.
@Test
public void reverse_a_string_with_apache_commons () {
String reversedString = StringUtils.reverse(PHRASE);
assertEquals(PHRASE_REVERSE, reversedString);
}