空白を取り除くにはどうすればいいですか?

私は自分のAP Javaクラス用のpalindromeテスタープログラムを作成しようとしています。私はコード内の空白を完全に削除する必要がありますが、そうすることはできません。

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();
  }
}

どんな助けでも大歓迎です。

1

6 答え

最初と最後の空白を削除したいだけなら、組み込み関数trim()を使うことができます。 "abcd" .trim()は "abcd"です。 どこでも削除したい場合は、空白クラスをパラメータとしてreplaceAll()メソッドを使用することができます。 "abcd" .replaceAll( "\ W"、 "")。

1
追加された

あなたのコードのようなものは、以下を除いて問題ありません。あなたは使用しています

String string = sc.next();

入力行全体を読むことはないので、テキストの一部が失われます。私はあなたがその行の代わりに次のものを使うべきだと思います。

String string = sc.nextLine();
1
追加された

String replace(char oldChar、char newChar)メソッドを使用する必要があります。 名前は、最初のオカレンスのみが置き換えられることを示唆していますが、事実はすべての出現が置き換えられることです。このメソッドの利点は、正規表現を使用しないため、より効率的です。

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

0
追加された

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);
0
追加された
これは replaceAll ブロックを置き換える必要があります
追加された 著者 Jean-Charles,
しかし、 replaceAll( "\\ W"、 "")および replaceAll( "\\ s +"、 "")
追加された 著者 Jean-Charles,
java.util.StringTokenizer をインポートします。どのJavaバージョンを使用しますか?
追加された 著者 Jean-Charles,
どこに置く?
追加された 著者 Kentaro51,
EclipseがStringTokenizerコードを認識していない
追加された 著者 Kentaro51,

私は実際にこれを試していませんが、 String.replaceAll(String regex、String replacement)メソッド?

public static String removeJunk (String string) {
    return string.replaceAll (" ", "");
}
0
追加された
試してみましたが動作しません
追加された 著者 Kentaro51,

注意すべき点は、数字以外のアルファベット文字をすべて削除するときに、 removeJunk は文字列を反転させることです(最後から一文字ずつ追加します)。

だから( reverse で)元のままにしておけば、与えられた文字列が回文であると常に主張します。

0
追加された
ああ、あなたは reversedCopy stringToTest ではなく workingCopy と比較することに気づいただけです。
追加された 著者 user1018337,