2014-08-27 27 views
0

我已經爲它做了所有的代碼,但我有一些問題。並非所有無效字符都被刪除,但我無法拾取一個模式。我一直在嘗試很長時間才能找出造成這種情況的原因,最後我決定讓你們看看是否有人可以弄清楚。使代碼清理不需要的字符字符串

這裏是有效字符的字符陣列(所有其他字符將從字符串被刪除):

static char[] validCharsUsername ={'Q','q','W','w','E','e','R','r','T','t','Y','y','U','u','I','i','O','o','P','p','A','a','S','s','D','d','F','f','G','g','H','h','J','j','K','k','L','l','Z','z','X','x','C','c','V','v','B','b','N','n','M','m','1','2','3','4','5','6','7','8','9','0','_','-'};

下面是代碼。 (this.validChars是指的數組):

public String cleanString(String text){ 
    StringBuilder sb = new StringBuilder(text); 
    for(int i = 0;i < sb.length() - 1;i++){ 
     char character = sb.charAt(i); 
     int index = 0; 
     char indexChar = this.validChars[0]; 
     boolean valid = false; 
     while(index < this.validChars.length - 1){ 
      index++; 
      indexChar = this.validChars[index]; 
      if(character == indexChar){ 
       valid = true; 
       index = this.validChars.length; 
      } 
     } 
     if(!valid){ 
      if(character == ' '){ 
       sb.deleteCharAt(i); 
       sb.insert(i, '_'); 
      }else{ 
       sb.deleteCharAt(i); 
      } 
      i = 0; 
     } 
    } 
    return sb.toString(); 
} 
+1

什麼是exmaple輸入輸出不起作用? – 2014-08-27 19:36:35

+0

@Pshemo改變了它,我的意思是有效的,對不起。 – vedi0boy 2014-08-27 19:58:05

回答

1

嘗試使用此代碼:

public static String cleanString(String text){ 
    StringBuilder sb = new StringBuilder(""); 
    for(int i = 0;i < text.length();i++){ 
     for (int j = 0; j < validCharsUsername.length; j++) { 
      if (validCharsUsername[j] == text.charAt(i)) { 
       sb.append(text.charAt(i)); 
       break; 
      } 
     } 
    } 
    return sb.toString(); 
} 

UPDATE 拳我認爲這是C#和我寫C#代碼,但現在我改成了java

+2

嗯......,這個問題被標記爲Java。在Java中,數組沒有'Contains'方法,字符串不能被下標訪問。 – 2014-08-27 19:34:44

+0

text [i]對我來說也是新的 – 2014-08-27 19:35:49

+0

是的,沒有包含方法。而不是文本[我]我使用text.charAt(我)。有沒有其他人有任何想法? – vedi0boy 2014-08-27 19:38:07

2

也許考慮用regular expressions哪個。正則表達式匹配a-z範圍內的所有字符和0-9的所有數字可以看起來像[a-zA-Z0-9]。正則表達式將匹配除了前面提到的可以關注一下[^a-zA-Z0-9]所有字符,以便您的代碼可能看起來像

public String cleanString(String text){ 
    return text.replaceAll("[^a-zA-Z0-9]",""); 
} 

在你想也讓空格或任何其他字符的情況下留下來,你可以將它們添加到這個character class,改變return語句到text.replaceAll("[^a-zA-Z0-9\\s]","");\\s代表空格)。

+0

感謝您的回答,但我與另一個一起去了。儘管這在未來仍然有用! – vedi0boy 2014-08-27 19:46:34

+0

@ vedi0boy沒問題:) – Pshemo 2014-08-27 19:50:35