回文 java 错误

Palindrome java error

我在 Java 中遇到问题。我正在制作一个程序来检查给定文本是否为回文。我 99% 确定我的代码是正确的,但我得不到好的结果。这是代码。

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    StringBuilder sb = new StringBuilder();

    System.out.print("Enter a line of text to check if palindrome: ");
    String text = scan.nextLine();
    String revText = text.replaceAll("[^A-Za-z]", "").toLowerCase().trim(); /*
                                                                      * Using regex here... everything that is not
                                                                      * (^) from A-Z (capital) to a-z replace with
                                                                      * ("") in revText.
                                                                      */
    sb.append(revText).reverse().toString();

    System.out.println("Reversed: " + sb);
    System.out.println("Normal: " + revText);

    System.out.println(sb.equals(revText));

    scan.close();
}

例如我输入:

Enter a line of text to check if palindrome: Anna2023
Reversed: anna 
Normal: anna
false

为什么是假的? ;/

尝试

System.out.println(revText.equals(sb.toString()));

sb 不等于字符串,因为它不是 String。它是用于构建字符串的容器。打印 sb 显示 String 的原因是 System.out.println 将调用 toString 给它的任何东西。

StringBuilder class 不会覆盖 Object equals 方法 class.Hence 它的 equals 方法将检查对象引用是否相同以及它们是否相同那么只有 return true.In String class 的情况下,它会覆盖对象 class 中的 equals 方法,并检查两个字符串的内容是否相等。

在您的代码中,您正在 StringBuilder 对象上调用 equals 方法,由于两个引用不同,因此 returning 为 false。 将其转换为字符串,然后调用 equals()

System.out.println(sb.toString().equals(revText));

Java .equals between String and StringBuilder