</>

Technology

Core Java

Difficulty

Beginner

Interview Question

How do you reverse a String in Java without using StringBuilder.reverse()?

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

  • null input
  • Empty string ""
  • Single character "a"
  • Palindrome "madam""madam"
  • String with spaces "hello world""dlrow olleh"

Follow AutomateQA

Related Topics