2014-12-30 43 views
2

字符串中的所有非字母字符,我想從一個字符串中刪除所有非字母字符。當我說所有字母時,我的意思是任何不在字母表或撇號中的字母。這是我的代碼。刪除在C#

public static string RemoveBadChars(string word) 
{ 
    char[] chars = new char[word.Length]; 
    for (int i = 0; i < word.Length; i++) 
    { 
     char c = word[i]; 

     if ((int)c >= 65 && (int)c <= 90) 
     { 
      chars[i] = c; 
     } 
     else if ((int)c >= 97 && (int)c <= 122) 
     { 
      chars[i] = c; 
     } 
     else if ((int)c == 44) 
     { 
      chars[i] = c; 
     } 
    } 

    word = new string(chars); 

    return word; 
} 

它很接近,但不起作用。問題是這樣的:

[in]: "(the" 
[out]: " the" 

它給了我一個空間存在,而不是「(」我要完全刪除字符

+0

非常相似:http://stackoverflow.com/questions/3210393/how-do-i-remove-all-non-alphanumeric-characters-from-a-string-除了破折號 – Mephy

+0

你有空格(空字符),因爲字符[]中的元素爲零,如果它是壞的字符。我想你需要根據你有多少不好的字符來縮小字符串 –

回答

2

正則表達式會更好,因爲這非常低效,但要回答您的問題,您的代碼的問題是您應該使用其他變量我在你的循環裏面。所以,這樣的事情:

public static string RemoveBadChars(string word) 
{ 
    char[] chars = new char[word.Length]; 
    int myindex=0; 
    for (int i = 0; i < word.Length; i++) 
    { 
     char c = word[i]; 

     if ((int)c >= 65 && (int)c <= 90) 
     { 
      chars[myindex] = c; 
      myindex++; 
     } 
     else if ((int)c >= 97 && (int)c <= 122) 
     { 
      chars[myindex] = c; 
      myindex++; 
     } 
     else if ((int)c == 44) 
     { 
      chars[myindex] = c; 
      myindex++; 
     } 
    } 

    word = new string(chars); 

    return word; 
} 
+0

謝謝,我知道我可以使用正則表達式,但我試圖沒有它,再加上我根本不理解正則表達式。 – jack3604

2

您應該使用Regular Expression (Regex)代替

public static string RemoveBadChars(string word) 
{ 
    Regex reg = new Regex("[^a-zA-Z']"); 
    return reg.Replace(word, string.Empty); 
} 

。如果您不想更換空間:

Regex reg = new Regex("[^a-zA-Z' ]"); 
+0

我以前見過這個,但說實話,我不知道這是如何工作的,這就是爲什麼我避免它。 「[^ a-zA-Z]」是什麼意思?對我來說,它看起來像無意義的數字,但意味着什麼,我無法弄清楚。 – jack3604

+0

撇號怎麼樣? –

+0

如果您點擊我答案中的鏈接,您可以看到所有正則表達式運算符的解釋。 @ V-SHY Opps,沒有仔細閱讀他的問題,改變了我的答案。 – Dan

1
private static Regex badChars = new Regex("[^A-Za-z']"); 

public static string RemoveBadChars(string word) 
{ 
    return badChars.Replace(word, ""); 
} 

這將創建一個由字符類(方括號中)的,看起來對於任何不(字符類中的領先^)A-Z,A-Z,或」正則表達式。然後它定義一個函數,用空字符串替換與表達式匹配的任何內容。

5

Char類有可能幫助的方法。使用Char.IsLetter()檢測有效信件(和撇號的額外檢查),然後將結果傳遞給string構造:

var input = "(the;':"; 

var result = new string(input.Where(c => Char.IsLetter(c) || c == '\'').ToArray()); 

輸出:

的」

+2

更漂亮,幹得好! – Fattie