我們平常在做字串修剪的時候,一定會常用到 Trim() 方法,我們通常拿它來修剪一串字串的前後空白字元,相同的家族成員還有 TrimStart() 及 TrimEnd(),如果我們還想修剪掉其他字元,我們可以使用 Trim(Char[]) 這個多載方法,但是 Trim() 方法不是只能修剪空白字元而已。
正確來講 Trim() 方法修剪掉的叫泛空白字元
,只要 .NET Framework 認定的泛空白字元就會被修剪掉,那 .NET Framework 怎麼認定泛空白字元呢? 是透過 Char.IsWhiteSpace() 這個方法,只要把字元丟進這個方法運算後回傳 true,就會被認定為泛空白字元,Trim() 方法就會把它給修剪掉。
那泛空白字元有哪些? 先講我們常見的,包括 空白字元
、\r
、\n
、\t
,這幾個我們平常在撰寫程式時看得到的,也是屬於泛空白字元,所以我們如果想要修剪掉換行符號時,大都會這樣寫 Trim('\r', '\n')
,其實不用,只需要直接呼叫 Trim() 方法就好了,也不怕會漏掉。
還有一些我們不常見的,底下我用 Unicode 字串的表達方式逐一列舉,想要印出來看看的朋友,加個字串符號 "" 就可以了,但不見得看得見就是了。
- \u00A0:NO-BREAK SPACE,這個大家應該很熟悉,通常我們稱呼它為
nbsp
。 - \u1680:OGHAM SPACE MARK - 歐甘空格,在歐甘字母中,用來分隔單詞的符號。
- \u2000:EN QUAD,空白字元的一種,一個 en 寬度的空白字元,亦是一個 em 寬度的一半。
- \u2001:EM QUAD,空白字元的一種,一個 em 寬度的空白字元。
- \u2002:EN SPACE,空白字元的一種,通常把它看作與 EN QUAD 相同。
- \u2003:EM SPACE,空白字元的一種,通常把它看作與 EM QUAD 相同。
- \u2004:THREE-PER-EM SPACE
- \u2005:FOUR-PER-EM SPACE
- \u2006:SIX-PER-EM SPACE
- \u2007:FIGURE SPACE
- \u2008:PUNCTUATION SPACE
- \u2009:THIN SPACE
- \u200A:HAIR SPACE,從 \u2004 開始到這裡各代表不同寬度的空白字元,在參考資料中有一個
Whitespace character
的連結,裡面有詳細描述出每個空白字元的寬度。 - \u202F:NARROW NO-BREAK SPACE,不換行的窄空白字元,用在蒙古文中。
- \u205F:MEDIUM MATHEMATICAL SPACE,用在數學公式中的空白字元。
- \u3000:IDEOGRAPHIC SPACE,
中文的全型空白字元
,這也是我們中文語系國家常看到的,所以 Trim() 也會一同修剪掉中文的全型空白字元。 - \u2028:LINE SEPARATOR,行與行之間的分隔符號。
- \u2029:PARAGRAPH SEPARATOR,段落與段落之間的分隔符號。
- \u0085:NEXT LINE,也是行分隔符號的一種,\u2028、\u2029、\u0085 這三個分隔符號,在大多數的文字編輯器中不會作用,分隔的效果大都使用 \r、\n。
- \u000B:LINE TABULATION,垂直的 TAB,這個字元我們在 C# 的字串中使用
\v
可以打得出來。 - \u000C:FORM FEED,換頁字元,這個字元會讓印表機換頁列印,在 C# 中用
\f
可以打得出來。
使用 Trim() 的時機,說多不多,說少也不少,知道了它會幫我們修剪掉這些泛空白字元,除了我們可以少打一些程式碼之外,也了解到其實有不少非我們預期的字元會被修剪掉,將來使用 Trim() 方法有非預期結果的時候,也可以從這方面去追查問題。