以下代码无效。任何人都可以告诉我以下代码有什么问题。从逻辑上讲它应该有用......
package assignments;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class IsPalindrome {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter a Word:");
StringBuffer sb1 = new StringBuffer(br.readLine());
StringBuffer sb2 = new StringBuffer(sb1);
sb1.reverse();
if(sb2.equals(sb1))
System.out.println("Palindrome");
else
System.out.println("Not a Palindrome");
}
}
答案 0 :(得分:10)
尝试
sb1.toString().equals(sb2.toString());
因为StringBuffer#toString方法返回缓冲区中存储的数据的String值:
返回表示此序列中数据的字符串。分配并初始化一个新的String对象,以包含此对象当前表示的字符序列。然后返回此String。对此序列的后续更改不会影响String的内容。
答案 1 :(得分:5)
在StringBuffer类equals
中,方法不会像String
类中那样被覆盖。在StringBuffer
中,它只是查看引用是否相同。
因此,您首先需要将其转换为String,然后使用equals方法。
所以试试
sb1.toString().equals(sb2.toString());
答案 2 :(得分:0)
你可以写
System.out.println("Enter a line:");
String line = br.readLine().replace(" ", ""); // palindromes can have spaces
String reverse = new StringBuilder(sb1).reverse().toString();
if(line.equals(reverse))
System.out.print("Not a ");
System.out.println("Palindrome");