2011-10-28 21 views
1

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

あなたのコードは次の点を除いて問題ありません。

String string = sc.next(); 

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

String string = sc.nextLine(); 
0

" "

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

どこに置くのですか? – Kentaro51

+0

これは、あなたの 'replaceAll'ブロックを置き換えるべきです –

+0

' replaceAll( "\\ W"、 "") 'と' replaceAll( "\\ s +"、 "") ' –

0

を削除するにはStringTokenizerを使用して、私は実際にこれをtesedしていないが、あなたはString.replaceAll(String regex, String replacement)方法を検討していますか?

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

試してみましたが、うまくいきません – Kentaro51

0

すべての非数字/英字removeJunkを除去しつつも、文字列を(それが端から開始し、一度に1つの文字を追加)反転させることであるために外を見るためにもう一つ。

それを元に戻すと(reverse)、元の文字列が残っていて、常にその文字列が回文であると主張します。

+0

ああ、気にしない - 'reversedCopy'と' stringToTest'ではなく 'workingCopy'を比較していることに気がつきました。 –

0

あなたはStringreplace(char oldChar, char newChar)メソッドを使用する必要があります。 名前は、最初のオカレンスだけが置換されることを示唆していますが、すべてのオカレンスが置き換えられるfact isが置き換えられます。このメソッドの利点は、正規表現を使用しないため、より効率的です。あなただけの開始と終了の空白を削除したい場合は

ので)あなたは(トリム機能に建て使用することができ、string.replace(' ', '');

1

に試してみて、例えば"abcd" .trim()は "abcd" どこでも削除したい場合は、空白クラスをパラメータとしてreplaceAll()メソッドを使用できます。 "abcd" .replaceAll( "\ W"、 "")。

関連する問題