首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 回文判斷:StringBuffer 反轉與 equals 陷阱修正

     編輯:程式設計綜合問答

原代碼問題

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 == strs.equals(str)== 比較引用地址,equals 比較字符序列
Scanner.next()Scanner.nextLine()next() 以空白分隔,無法讀取含空格字符串
StringBufferStringBuilder非多線程環境 StringBuilder 無同步開銷,性能更優

進階:忽略大小寫/標點

String clean = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
String reversed = new StringBuilder(clean).reverse().toString();
if (clean.equals(reversed)) ...

「回文判斷」是面試必考基本功:StringBuilder 反轉 + equals 比較 + 清洗預處理 三步走,寫對細節才算過關。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved