Kentaro51
Kentaro51

Reputation: 45

How do i remove the whitespace?

I'm trying to create a palindrome tester program for my AP Java class and I need to remove the white spaces in my code completely but it's not letting me do so.

import java.util.Scanner;

public class Palin{

  public static boolean isPalindrome(String stringToTest) {
    String workingCopy = removeJunk(stringToTest);
    String reversedCopy = reverse(workingCopy);

    return reversedCopy.equalsIgnoreCase(workingCopy);
  }

  public static String removeJunk(String string) {
    int i, len = string.length();
    StringBuffer dest = new StringBuffer(len);
    char c;


    for (i = (len - 1); i >= 0; i-=1) {
      c = string.charAt(i);
      if (Character.isLetterOrDigit(c)) 
      {
        dest.append(c);
      }


    }

    return dest.toString();
  }

  public static String reverse(String string) {
    StringBuffer sb = new StringBuffer(string);

    return sb.reverse().toString();
  }

  public static void main(String[] args) {
    System.out.print("Enter Palindrome: ");
    Scanner sc = new Scanner(System.in);
    String string = sc.next();

    String str = string;
    String space = "";
    String result = str.replaceAll("\\W", space);
    System.out.println(result);

    System.out.println();
    System.out.println("Testing palindrome:");
    System.out.println("    " + string);
    System.out.println();

    if (isPalindrome(result)) {
      System.out.println("It's a palindrome!");
    } else {
      System.out.println("Not a palindrome!");
    }
    System.out.println();
  }
}

Any help would be greatly appreciated.

Upvotes: 1

Views: 345

Answers (6)

Sergey Gazaryan
Sergey Gazaryan

Reputation: 1043

If you just want to remove the beginning and ending whitespace, you can use the built in function trim(), e.g. " abcd ".trim() is "abcd" If you want to remove it everywhere, you can use the replaceAll() method with the whitespace class as the parameter, e.g. " abcd ".replaceAll("\W","").

Upvotes: 1

Marc Nuri
Marc Nuri

Reputation: 3684

You should use the String replace(char oldChar, char newChar) method. Although the name suggests that only the first occurrence will be replaced, fact is that all occurrences will be replaced. The advantage of this method is that it won't use regular expressions, thus is more efficient.

So give a try to string.replace(' ', '');

Upvotes: 0

Venushka Perera
Venushka Perera

Reputation: 441

Seems like your code is fine except for the following. You are using

String string = sc.next();

which will not read the whole line of input, hence you will lose part of the text. I think you should use the following instead of that line.

String string = sc.nextLine();

Upvotes: 1

user1018337
user1018337

Reputation:

Another thing to look out for is that while removing all non-digit/alpha characters removeJunk also reverses the string (it starts from the end and then appends one character at a time).

So after reversing it again (in reverse) you are left with the original and it will always claim that the given string is a palindrome.

Upvotes: 0

Shmuel A. Kam
Shmuel A. Kam

Reputation: 82

I haven't actually tesed this, but have you considered the String.replaceAll(String regex, String replacement) method?

public static String removeJunk (String string) {
    return string.replaceAll (" ", "");
}

Upvotes: 0

Jean-Charles
Jean-Charles

Reputation: 1720

Use a StringTokenizer to remove " "

  StringTokenizer st = new StringTokenizer(string," ",false);
  String t="";
  while (st.hasMoreElements()) t += st.nextElement();
  String result = t;
  System.out.println(result);

Upvotes: 0

Related Questions