Как сравнить два объекта 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");