[小菜一碟] Trim() 不只能修剪空白字元而已

我們平常在做字串修剪的時候,一定會常用到 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() 方法有非預期結果的時候,也可以從這方面去追查問題。

參考資料

 

C# 指南 ASP.NET 教學 ASP.NET MVC 指引
Azure SQL Database 教學 SQL Server 教學 Xamarin.Forms 教學