2012-07-31 57 views
3

例如,如果我想刪除空格從字符串尾隨逗號,我可以這樣做:有沒有更好的方法來修剪字符串中的空白和其他字符?

String x = "abc,\n"; 
x.Trim().Trim(new char[] { ',' }); 

其正確輸出abc。我可以很容易地用擴展方法來包裝這個,但是我想知道是否有一個內置的方法,只需要調用Trim()即可。我已經習慣了Python的,在那裏我可以做到這一點:所有Unicode whitespace characters,除少數例外,被剝離(見注呼叫者節)

import string 
x = "abc,\n" 

x.strip(string.whitespace + ",") 

The documentation狀態,但我不知道是否有是一種不需要在擴展方法中手動定義字符數組的方法。

有沒有內置的方法來做到這一點?我要刪除的非空白字符的數量可能會有所不同,並且不一定包含逗號,並且我想要刪除所有空格,而不僅僅是\n

+2

這個問題永遠存在於「有少數例外」條款中。當你需要一個Note來告訴大家爲什麼它不能按預期工作時,api會失去價值。不是.NET方式,你當然可以讓它成爲你的。 – 2012-07-31 23:33:37

+3

注意,如果在**最後一個不需要的字符之前有空格**,則雙重修剪調用失敗。例如x =「abc,\ n」。 – MKesper 2016-04-21 11:19:49

回答

4

使用正則表達式,使這個簡單的:

text = Regex.Replace(text, @"^[\s,]+|[\s,]+$", ""); 

這將匹配的Unicode空白字符爲好。

+0

我假設沒有意想不到的後果,例如擴展它。如果我想刪除','和'b',只需使用'@「^ [\ s,b] + | [\ s,b] + $」'?這樣做只是一個簡單的例子,但我想確保我不會錯過任何東西。 – 2012-07-31 22:44:39

+0

是的,這工作正常。 – porges 2012-07-31 23:39:34

4

是的,你可以這樣做:

x.Trim(new char[] { '\n', '\t', ' ', ',' }); 

因爲換行符在技術上是一個字符,可以將其添加到陣列中,避免兩次調用Trim

編輯

.NET 4.0使用this method,以確定是否一個字符被認爲是空白。早期版本維護一個空白字符的內部列表(Source)。

如果你真的想只用一個電話Trim,那麼你的應用程序可以做到以下幾點:

  1. 在啓動時,掃描the range of Unicode whitespace characters,呼籲每個字符Char.IsWhiteSpace
  2. 如果方法調用返回true,則將該字符推到一個數組上。
  3. 添加自定義字符數組以及

現在你可以使用一個單一的Trim調用,通過傳遞你構建的陣列。

我猜Char.IsWhiteSpace取決於當前的語言環境,所以你必須小心注意語言環境。

+0

請參閱我的問題的最後一段:「我要刪除的非空白字符的數量可能會有所不同,並且不一定包含逗號,並且我希望刪除**全部**空白,而不僅僅是\ n。 「我知道我可以手動指定字符,但是如果我想刪除* all *空格,我不知道手動定義char []是否知道,只需調用'.Trim()'和*然後*調用' .Trim(new char [] {...})' – 2012-07-31 22:21:36

+0

試試我的編輯。只需在數組中定義空白字符以及您的自定義字符。 – 2012-07-31 22:23:48

+1

只需定義一個包含[所有這些空格字符]的數組(http://en.wikipedia.org/wiki/Whitespace_character#Unicode)?有沒有更好的辦法?有沒有辦法獲得所有字符的列表或字符數組.NET認爲空白? – 2012-07-31 22:24:30

1

你可以有以下的地帶擴展方法

public static class ExtensionMethod 
{ 
    public static string Strip(this string str, char[] otherCharactersToRemove) 
    { 
     List<char> charactersToRemove = (from s in str 
           where char.IsWhiteSpace(s) 
           select s).ToList(); 
     charactersToRemove.AddRange(otherCharactersToRemove); 
     string str2 = str.Trim(charactersToRemove.ToArray()); 
     return str2; 
    } 
} 

然後你可以這樣調用它:

static void Main(string[] args) 
     { 
      string str = "abc\n\t\r\n , asdfadf , \n \r \t"; 
      string str2 = str.Strip(new char[]{','}); 
     } 

出認沽將是:

str2 = "abc\n\t\r\n , asdfadf" 

大道拓方法首先從列表中獲取字符串中的所有WhiteSpace字符。添加其他字符在列表中刪除,然後調用修剪。

+1

如果你使用'params Char [] otherCharactersToRemove',你可以用逗號將它們作爲參數,而不需要每次在調用代碼中生成一個char數組;} – Nyerguds 2015-08-07 12:28:49

+0

@Nyerguds儘管作爲[ params](https://msdn.microsoft.com/en-us/library/w5zay9db%28v=vs.140%29.aspx)表明,可以提供可變數量的參數*或*單個數組參數只要數組類型與被調用方法的參數類型相匹配即可。 – DavidRR 2016-05-10 15:22:47

+0

@DavidRR正好。這意味着使用參數意味着你可以給出一個數組,給出元素,或者什麼也不給。靈活性。你的觀點到底是什麼? – Nyerguds 2016-05-13 10:21:02

相關問題