Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีง่ายที่สุดในการ Reverse String ใน Java

วิธีที่ 1: ใช้ StringBuffer.reverse() (ง่ายที่สุด)

คลาส StringBuffer มีเมธอด reverse() กลับลำดับตัวอักษรในออบเจ็กต์และคืนค่า StringBuffer เดียวกัน

ขั้นตอน

  1. สร้าง StringBuffer ด้วยสตริงต้นฉบับ
  2. เรียก reverse()
  3. แปลงกลับเป็น 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()