2011-10-28 87 views
1

我正在嘗試爲我的AP Java類創建一個迴文測試程序,並且我需要完全刪除代碼中的空白區域,但它不會讓我這樣做。我如何刪除空白?

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刪除" "

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

另一件事看出來的是,雖然移除所有非數字/字母字符removeJunk也反轉的字符串(它從端部開始,然後在一個時間附加一個字符)。

所以在反轉後再次(在reverse)你留下的原始,它會一直聲稱給定的字符串是迴文。

+0

啊,沒關係 - 只是注意到你把'reversedCopy'與'workingCopy'比較而不是'stringToTest'。 – 2011-10-28 12:54:37

0

您應該使用Stringreplace(char oldChar, char newChar)方法。 儘管名稱暗示只有第一次出現纔會被替換,但所有出現的都將被替換。這種方法的優點是不會使用正則表達式,因此效率更高。

所以給一個嘗試string.replace(' ', '');

1

如果你只是想刪除的開始和結束的空白,你可以使用內置的功能修剪(),例如「abcd」.trim()是「abcd」 如果您想要在任何地方刪除它,可以使用帶有空白類的replaceAll()方法作爲參數,例如「abcd」.replaceAll(「\ W」,「」)。