📘 Introduction
String manipulation is a critical part of many programming tasks—from data formatting and validation to solving interview challenges. Two operations that frequently appear in both real-world and algorithmic scenarios are reversing and rotating strings.
Java offers multiple ways to perform these operations, each with trade-offs in readability, performance, and flexibility. Whether you're working on text processing, solving a coding challenge, or building custom algorithms, mastering string reversal and rotation gives you a sharper edge.
In this guide, we’ll explore various methods to reverse and rotate strings in Java, with performance insights, code samples, edge cases, and best practices.
🔁 What Does It Mean to Reverse or Rotate a String?
🔄 String Reversal
Reversing a string means flipping its characters from end to start.
- Input:
"Java"
- Output:
"avaJ"
🔃 String Rotation
Rotating a string means shifting characters around:
- Left Rotation by 2:
"Java"
→"vaJa"
- Right Rotation by 2:
"Java"
→"vaJa"
(same for even length)
🔧 String Reversal in Java
✅ Using StringBuilder.reverse()
String input = "Hello";
String reversed = new StringBuilder(input).reverse().toString();
System.out.println(reversed); // "olleH"
- 🔹 Fast and clean
- 🔹 Immutable-friendly
- 🔸 Not thread-safe (use
StringBuffer
if needed)
✅ Manual Character Swap (Two-pointer Technique)
public String reverse(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);
}
- 🔹 Useful in interviews
- 🔹 In-place mutation for char arrays
- 🔸 Verbose for simple use cases
🔁 Rotating Strings in Java
✅ Left Rotation by N Characters
public String rotateLeft(String str, int n) {
int len = str.length();
n %= len;
return str.substring(n) + str.substring(0, n);
}
✅ Right Rotation by N Characters
public String rotateRight(String str, int n) {
int len = str.length();
n %= len;
return str.substring(len - n) + str.substring(0, len - n);
}
- 🔹 Efficient O(1) operations using
substring()
- 🔹 Avoids loops and temporary buffers
📈 Performance and Memory Considerations
Method | Time Complexity | Memory Use | Notes |
---|---|---|---|
StringBuilder.reverse() |
O(n) | Low | Best for quick reversals |
Manual Char Swap | O(n) | Medium | More control, useful in custom logic |
Rotation with substring() |
O(n) | Medium | Simple and effective |
Using Loops | O(n) | High | Avoid unless necessary |
🧠 Real-World Applications
- Palindrome Check: Reverse and compare
- Log Parsing: Reorder logs based on rotation keys
- Encryption Techniques: Caesar cipher-style string manipulation
- Competitive Programming: Frequent requirement in algorithm challenges
🧱 Edge Cases and Gotchas
- Empty string or single character: Always return the same string
- Negative or large rotation: Use
n % length
to wrap around - Unicode or surrogate pairs: Use
Character.toChars()
for correct behavior - Thread-safety: Use
StringBuffer
for synchronized use cases
📌 What's New in Java Versions?
- ✅ Java 8+: Lambda-friendly, Stream APIs
- ✅ Java 11+:
String.repeat(n)
helpful when padding after rotation - ✅ Java 15+: Use Text Blocks to format test cases for rotated strings
- ✅ Java 21+: String templates simplify combining reversed/rotated strings with messages
🔁 Refactoring Example
Before (manual reverse logic):
String reversed = "";
for (int i = input.length() - 1; i >= 0; i--) {
reversed += input.charAt(i); // inefficient due to string immutability
}
After (efficient):
String reversed = new StringBuilder(input).reverse().toString();
✅ Best Practices
- Use
StringBuilder.reverse()
unless you need custom logic - Prefer
substring()
for rotations to avoid manual looping - Always validate string length before rotating
- Use modulo
%
to simplify index wraparound
📋 Conclusion and Key Takeaways
- Java provides robust tools for reversing and rotating strings efficiently
- Choose the right method depending on your use case (simple reverse vs. performance-critical rotation)
- Be mindful of edge cases like empty strings, Unicode handling, and thread safety
These techniques are not only interview essentials but also critical in real-world text-processing pipelines.
❓ FAQ: Frequently Asked Questions
-
Which is better:
StringBuilder.reverse()
or manual reverse?
UseStringBuilder.reverse()
unless performance profiling demands otherwise. -
Can I rotate a string in-place?
Not with immutableString
, but yes withchar[]
. -
How do I reverse words, not characters?
Usesplit(" ")
→ reverse array →String.join(" ", array)
. -
What if rotation amount is larger than string length?
Always usen % length
to normalize. -
Are these operations thread-safe?
StringBuilder
is not. UseStringBuffer
for thread-safe alternatives. -
How do I reverse Unicode properly?
UseCharacter.codePointAt()
and handle surrogate pairs correctly. -
Can I chain reverse and rotate?
Yes. Example:rotateLeft(reverse(input), 2);
-
What’s a fast way to rotate left by 1 character repeatedly?
Usesubstring(1) + charAt(0)
-
Does reversing affect the original string?
No. All Java strings are immutable. -
How do I test these operations?
Use JUnit with multiple assert statements on known inputs/outputs.