如何使用.equals()方法比较两个StringBuffer对象?

时间:2013-06-14 14:12:38

标签: java string tostring stringbuffer object-to-string

以下代码无效。任何人都可以告诉我以下代码有什么问题。从逻辑上讲它应该有用......

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");
}
}

3 个答案:

答案 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");