StringBuffer SB = new StringBuffer(s);
System.out.println(SB.reverse()); // ① 打印反轉後對象
String str = SB.toString(SB.reverse()); // ② toString() 無參數,且再次反轉還原
if (s == str) // ③ == 比較引用,非內容
import java.util.Scanner;
public class PalindromeCheck {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("請輸入字符串:");
String s = in.nextLine(); // next() 遇空格截斷,用 nextLine()
StringBuilder sb = new StringBuilder(s); // 單線程用 StringBuilder 更快
String reversed = sb.reverse().toString(); // 反轉並轉字符串
if (s.equals(reversed)) { // equals 比較內容
System.out.println("是回文");
} else {
System.out.println("不是回文");
}
}
}
| 錯誤 | 正確 | 原因 |
|---|---|---|
SB.toString(SB.reverse()) | sb.reverse().toString() | toString() 無參;鏈式調用順序:先反轉再轉字符串 |
s == str | s.equals(str) | == 比較引用地址,equals 比較字符序列 |
Scanner.next() | Scanner.nextLine() | next() 以空白分隔,無法讀取含空格字符串 |
StringBuffer | StringBuilder | 非多線程環境 StringBuilder 無同步開銷,性能更優 |
String clean = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
String reversed = new StringBuilder(clean).reverse().toString();
if (clean.equals(reversed)) ...
「回文判斷」是面試必考基本功:StringBuilder 反轉 + equals 比較 + 清洗預處理 三步走,寫對細節才算過關。