2013-04-05 44 views
0

我從字符串中刪除字符時出現錯誤。我嘗試了一切,我可以找到在這個網站上,沒有任何工作。這不是一個幫助文章。相反,也許是一個答案,解釋了爲什麼會出現這個問題,以及如何解決它,以防其他人遇到這個問題。如果沒有進一步的正當,這裏是我的代碼:正在刪除字符串中的字符-java

public JTextField Clean() 
{ 
    String Cleaner = TopField.getText(); 
    Cleaner=Cleaner.toLowerCase(); 
    int Length = Cleaner.length(); 
    StringBuilder Combiner = new StringBuilder(Cleaner); 
    for (int x=0;x+1<Length;x++) 
    { 
     char c = Cleaner.charAt(x); 
     char c1 = Cleaner.charAt(x+1); 
     if(c==' ' && c1==' ') 
     { 
      Combiner.deleteCharAt(x); 
      Cleaner=Combiner.toString(); 
     } 
     if(c!='a' && c=='b' && c!='c' && c!='d' && c!='f' && c!='g' && c!='h' && c!='i' && c!='j' && c!='k' && c!='l' && c!='m' && c!='n' && c!='o' && c!='p' && c!='q' && c!='r' && c!='s' && c!='t' && c!='u' && c!='v' && c!='w' && c!='x' && c!='y' && c!='z' && c!=' ') 
     {Combiner.deleteCharAt(x); 
     Cleaner=Combiner.toString();} 
     }  

     TopField.setText(Cleaner); 
     return TopField;    
} 

我收到指出我的價值是出界的字符串,我輸入的距離的誤差。請注意,這是我創建的類中的一種方法,可以刪除任何不是字母或空格的字符。

在此先感謝

+0

恐怖!學習如何字符編碼的工作。那個'如果'塊肯定是太痛苦了! – 2013-04-05 02:46:50

回答

2

有許多的東西,我彈出。

  • 你的基礎在一個固定值(Length),但其中String的實際長度可減少循環...
  • 你可能消除每個循環2個字符(有兩個deleteCharAt呼叫)
  • 該循環沒有考慮到String的縮小尺寸。例如。 x == 1,你x刪除字符,你增加x 1(x == 2),有效地跳過一個字符(第2位的字符是現在所在的位置1個
  • if語句是不必要的長。事實上,根據您的需要,你可以使用Character.isDigitCharacter.isLetterCharacter.isWhiteSpace

String Cleaner = TopField.getText(); 
Cleaner = Cleaner.toLowerCase(); 
StringBuilder Combiner = new StringBuilder(Cleaner); 
int x =0; 
while (x < Combiner.length()) { 
    char c = Combiner.charAt(x); 
    if (c >= 'a' && c <= 'z' || c == ' ') { 
     Combiner.deleteCharAt(x); 
    } else { 
     x++; 
    } 
} 

從代碼的外觀上來看,你似乎想篩選JTextField所以它只會允許數字值。這將是更好的使用像一個JSpinnerJFormattedTextFieldDocumentFilter並確保數據的正確性,因爲它是進入......恕我直言

4

當你刪除字符,Cleaner變短,所以你可能會達到一個點,x太大。

我會使用正則表達式提出了不同的方法:

string cleaned = TopField.getText().toLowerCase().replaceAll("[^a-z ]", ""); 
+0

這確實可能是問題,我將如何解決它? – 2013-04-05 02:45:55

+0

減少長度... – 2013-04-05 02:47:06

+0

我遞減了長度,錯誤消失了!然而,它並沒有刪除角色,它根本沒有做任何事情。 – 2013-04-05 02:50:52

0

我用了一個ISDIGIT()函數,發現輸出是不正確的。看看我測試過的代碼,發現輸出有問題。任何一個解釋。

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    String temp="you got 211111 out of 211111?"; 
    StringBuilder cleaner=new StringBuilder(temp); 
    for(int i=0;i<cleaner.length();i++) 
    { 
     char c=cleaner.charAt(i); 
     if(Character.isDigit(c)) 
     { 
      cleaner.deleteCharAt(i); 
     } 
    } 
    System.out.println(cleaner); 

我得到的輸出爲:111中有111個?

它不會刪除一些數字。

此外還發現Java中沒有名爲replaceAll()的函數。

+0

只需使用madprogrammers示例O.O – 2013-05-09 02:16:11