วิธีที่ 1: ใช้ StringBuffer.reverse() (ง่ายที่สุด)
คลาส StringBuffer มีเมธอด reverse() กลับลำดับตัวอักษรในออบเจ็กต์และคืนค่า StringBuffer เดียวกัน
ขั้นตอน
- สร้าง StringBuffer ด้วยสตริงต้นฉบับ
- เรียก
reverse() - แปลงกลับเป็น String ด้วย
toString()
ตัวอย่าง
public class SimpleReverse {
public static void main(String[] args) {
String str = "Hello how are you";
StringBuffer sb = new StringBuffer(str);
String reversed = sb.reverse().toString();
System.out.println(reversed); // uoy era woh olleH
}
}
ผลลัพธ์
uoy era woh olleH
วิธีที่ 2: ใช้ Recursion
เรียกฟังก์ชันตัวเองจนกว่าสตริงจะว่าง แล้วนำตัวแรกไปต่อท้าย
public class StringReverseRecursion {
public static String reverse(String str) {
if (str.isEmpty()) return str;
return reverse(str.substring(1)) + str.charAt(0);
}
public static void main(String[] args) {
System.out.println(reverse("Tutorialspoint")); // tniopslairotuT
}
}
ข้อจำกัด
- StackOverflowError สำหรับสตริงยาวมาก (> ~10,000 ตัวอักษร)
- สร้างออบเจ็กต์ String ใหม่ทุกครั้ง (ไม่ประหยัดหน่วยความจำ)
วิธีที่ 3: ใช้ toCharArray() + Swap
แปลงเป็น char array แล้วสลับตัวแรก-ตัวสุดท้าย, ตัวที่สอง-ตัวสุดท้ายลำดับสอง...
import java.util.Arrays;
public class StringReverseArray {
public static void main(String[] args) {
String str = "Tutorialspoint";
char[] arr = str.toCharArray();
int n = arr.length;
for (int i = 0; i < n / 2; i++) {
char temp = arr[i];
arr[i] = arr[n - 1 - i];
arr[n - 1 - i] = temp;
}
System.out.println("Reversed: " + Arrays.toString(arr));
System.out.println("As String: " + new String(arr));
}
}
ผลลัพธ์
Reversed: [t, n, i, o, p, s, l, a, i, r, o, t, u, T]
As String: tniopslairotuT
วิธีที่ 4: StringBuilder (แนะนำสำหรับ Single-threaded)
StringBuilder เหมือน StringBuffer แต่ไม่ synchronized (เร็วกว่า)
String reversed = new StringBuilder(str).reverse().toString();
วิธีที่ 5: Java Stream API (Java 8+)
String reversed = str.chars()
.mapToObj(c -> (char) c)
.reduce("", (a, b) -> b + a, (a, b) -> b + a); // ไม่แนะนำ: ช้า
การเปรียบเทียบ
| วิธี | ความง่าย | ประสิทธิภาพ | Thread-Safe |
|---|---|---|---|
| StringBuffer.reverse() | ⭐⭐⭐ | ดี | ใช่ |
| StringBuilder.reverse() | ⭐⭐⭐ | ดีที่สุด | ไม่ |
| toCharArray + swap | ⭐⭐ | ดีมาก (in-place) | N/A |
| Recursion | ⭐ | แย่ (stack, allocation) | N/A |
| Stream API | ⭐ | แย่ที่สุด | N/A |
สรุป
แนะนำ: new StringBuilder(str).reverse().toString() - เร็วที่สุด โค้ดสั้น สำหรับ single-threaded
ถ้าต้อง thread-safe: new StringBuffer(str).reverse().toString()