我在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
为什么是假的? ; /
答案 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));