0

The following code did not work. Can anyone tell me what's wrong with the following code. Logically it should work...

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

3 回答 3

10

尝试

sb1.toString().equals(sb2.toString());

因为StringBuffer#toString方法返回存储在缓冲区内的数据的 String 值:

返回表示此序列中数据的字符串。分配并初始化一个新的 String 对象以包含该对象当前表示的字符序列。然后返回此字符串。对该序列的后续更改不会影响字符串的内容。

于 2013-06-14T14:13:22.277 回答
5

在 StringBuffer 类equals中的方法不会像在String类中那样被覆盖。StringBuffer它只是查看引用是否相同。因此,您首先需要将其转换为字符串,然后使用 equals 方法。

所以试试

sb1.toString().equals(sb2.toString());
于 2013-06-14T14:30:01.657 回答
0

You can write

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");
于 2013-06-14T14:50:04.310 回答