Answer
Reverse a String Without StringBuilder.reverse()
Method 1: Using for loop (Most Common Answer)
Java
public static String reverseString(String str) {
if (str == null || str.length() <= 1) return str;
String reversed = "";
for (int i = str.length() - 1; i >= 0; i--) {
reversed += str.charAt(i);
}
return reversed;
}
System.out.println(reverseString("Hello")); // "olleH"
System.out.println(reverseString("AutomateQA")); // "AQetatotuA"
Method 2: Using char array (Optimal)
Java
public static String reverseWithCharArray(String str) {
char[] chars = str.toCharArray();
int left = 0, right = chars.length - 1;
while (left < right) {
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
return new String(chars);
}
System.out.println(reverseWithCharArray("Selenium")); // "muineleS"
Method 3: Using StringBuilder (fastest but using StringBuilder manually)
Java
public static String reverseWithSB(String str) {
StringBuilder sb = new StringBuilder();
for (int i = str.length() - 1; i >= 0; i--) {
sb.append(str.charAt(i));
}
return sb.toString();
}
Method 4: Using Recursion
Java
public static String reverseRecursive(String str) {
if (str.length() == 0) return str;
return reverseRecursive(str.substring(1)) + str.charAt(0);
}
System.out.println(reverseRecursive("Java")); // "avaJ"
Method 5: Using Stack
Java
public static String reverseWithStack(String str) {
Stack<Character> stack = new Stack<>();
for (char c : str.toCharArray()) {
stack.push(c);
}
StringBuilder result = new StringBuilder();
while (!stack.isEmpty()) {
result.append(stack.pop());
}
return result.toString();
}
Method 6: Using Java 8 Streams
Java
public static String reverseWithStream(String str) {
return str.chars()
.mapToObj(c -> String.valueOf((char) c))
.reduce("", (a, b) -> b + a);
}
Test with JUnit
Java
@Test
public void testReverseString() {
assertEquals("olleH", reverseString("Hello"));
assertEquals("", reverseString(""));
assertEquals("a", reverseString("a"));
assertEquals("321", reverseString("123"));
assertEquals("muineleS", reverseString("Selenium"));
assertNull(reverseString(null));
}
Edge Cases to Handle
- ✓
nullinput - ✓Empty string
"" - ✓Single character
"a" - ✓Palindrome
"madam"→"madam" - ✓String with spaces
"hello world"→"dlrow olleh"
