YouTip LogoYouTip

String Reverse

## Java String Reversal: A Comprehensive Guide In Java development, reversing a string is a common operation used in data manipulation, algorithm challenges, and text processing. Since the `java.lang.String` class in Java is immutable (its value cannot be changed after it is created), you cannot reverse a string in place directly on the `String` object itself. Instead, Java provides helper classes and alternative approaches to achieve this. This tutorial covers the most efficient and common ways to reverse a string in Java, ranging from built-in API methods to manual algorithmic implementations. --- ## 1. Using Built-in API Methods (Recommended) The most straightforward and performance-optimized way to reverse a string in Java is using the `reverse()` method provided by the `StringBuilder` or `StringBuffer` classes. ### StringBuilder vs. StringBuffer * **`StringBuilder`** (Recommended for single-threaded environments): It is faster because it is not synchronized. * **`StringBuffer`** (Recommended for multi-threaded environments): It is thread-safe because its methods are synchronized. ### Code Example: Using `StringBuffer` Below is a complete example demonstrating how to reverse a string using the `StringBuffer` class: ```java public class StringReverseExample { public static void main(String[] args) { String original = "YouTip"; // Initialize StringBuffer with the original string, reverse it, and convert it back to String String reversed = new StringBuffer(original).reverse().toString(); System.out.println("Original String: " + original); System.out.println("Reversed String: " + reversed); } } ``` ### Output ```text Original String: YouTip Reversed String: piTuoY ``` --- ## 2. Alternative Methods for Reversing a String While the built-in `reverse()` method is ideal for production, interviewers often ask for manual implementations to test your understanding of basic algorithms and data structures. ### Method A: Using a Character Array (Two-Pointer Approach) This is highly efficient as it avoids the overhead of creating multiple intermediate objects. It converts the string into a character array and swaps characters from both ends moving toward the center. ```java public class CharArrayReverse { public static void main(String[] args) { String original = "Developer"; char[] charArray = original.toCharArray(); int left = 0; int right = charArray.length - 1; while (left < right) { // Swap characters char temp = charArray; charArray = charArray; charArray = temp; // Move pointers left++; right--; } String reversed = new String(charArray); System.out.println("Original: " + original); System.out.println("Reversed: " + reversed); } } ``` ### Method B: Using Recursion A conceptual approach that breaks down the problem by recursively appending the last character of the string to the reversed remaining substring. ```java public class RecursiveReverse { public static void main(String[] args) { String original = "Java"; String reversed = reverseString(original); System.out.println("Original: " + original); System.out.println("Reversed: " + reversed); } public static String reverseString(String str) { // Base case: if string is empty or has only one character if (str == null || str.length() <= 1) { return str; } // Recursive call return reverseString(str.substring(1)) + str.charAt(0); } } ``` --- ## 3. Summary & Best Practices | Method | Time Complexity | Space Complexity | Best Used For | | :--- | :--- | :--- | :--- | | **`StringBuilder.reverse()`** | $O(n)$ | $O(n)$ | Standard production code (Single-threaded). | | **`StringBuffer.reverse()`** | $O(n)$ | $O(n)$ | Multi-threaded applications where thread safety is required. | | **Two-Pointer (Char Array)** | $O(n)$ | $O(n)$ | Low-level optimization and technical interviews. | | **Recursion** | $O(n)$ | $O(n)$ (Call Stack) | Educational purposes (Not recommended for long strings due to potential `StackOverflowError`). |
← Arrays SearchJava Examples β†’