Как сравнить два объекта StringBuffer с помощью метода.equals()?

Следующий код не работает. Может кто-нибудь сказать мне, что не так со следующим кодом. По логике это должно работать...

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 ответа

Решение

Пытаться

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

потому что метод StringBuffer#toString возвращает значение String данных, хранящихся в буфере:

Возвращает строку, представляющую данные в этой последовательности. Новый объект String выделяется и инициализируется, чтобы содержать последовательность символов, в настоящее время представленную этим объектом. Эта строка затем возвращается. Последующие изменения в этой последовательности не влияют на содержимое строки.

В классе StringBuffer equals метод не переопределяется как в String учебный класс. В StringBuffer это только смотрит, совпадают ли ссылки. Поэтому сначала вам нужно преобразовать это в строку, а затем использовать метод equals.

Так что постарайтесь

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

Ты можешь написать

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");
Другие вопросы по тегам