Palindrome java错误

时间:2016-11-13 19:11:36

标签: java regex syntax-error palindrome replaceall

我在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

为什么是假的? ; /

2 个答案:

答案 0 :(得分:3)

尝试

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

sb不等于字符串,因为它不是String。它是用于构建字符串的容器。打印某人显示String的原因是,System.out.println会在提供给它的任何内容上调用toString

答案 1 :(得分:1)

StringBuilder类不会覆盖equals类中的Object方法。因此,它的equals方法将检查对象引用是否相同,如果它们是相同的那么只有它会返回true。如果是String类,它会覆盖来自对象类的equals方法,并检查两个字符串的内容是否相等。

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

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

Java .equals between String and StringBuilder