Search code examples
javastringbuilder

Using StringBuilder for Palindrome Example in Java


I am trying to learn using StringBuilder class with a palindrome example and written this:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    StringBuilder word = new StringBuilder(scanner.nextLine());
    System.out.println(word);
    StringBuilder reverseWord = word.reverse();
    System.out.println(reverseWord);

    if(word.toString().equals(reverseWord.toString())) {
        System.out.println("yes");
    }else {
        System.out.println("no");
    }
}

Program constantly gives me the result "yes" but I fail to understand why? Obviously there is something wrong on my if block but cannot see what it is.


Solution

  • When you're calling word.reverse() it's not returning a new instance of reversed StringBuilder. Instead it's reversing elements inside StringBuilder so both word and reverseWord StringBuilder objects have characters in reversed order. You don't need to use two StringBuilder objects. You just need one to find out the reverse and then you can compare it with orignal like this:

    String input = scanner.nextLine();
    StringBuilder reverseWordBuilder = new StringBuilder(input);
    
    String reversedWord = reverseWordBuilder.reverse().toString();
    if(input.equals(reversedWord)) {
        System.out.println("yes");
    } else {
        System.out.println("no");
    }