次のリビジョン
|
前のリビジョン
|
blog:2015:2015-09-17 [2015-09-17 21:58] Decomo 作成 |
blog:2015:2015-09-17 [2018-06-23 12:45] (現在) Decomo |
C#の''string''クラスにある''Trim()''メソッドは、C#の三大便利関数の1つと言って良いくらい便利な関数だ。 | C#の''string''クラスにある''Trim()''メソッドは、C#の三大便利関数の1つと言って良いくらい便利な関数だ。 |
| |
簡単にいえば文字列の先頭と末尾に付随する空白文字を削除する関数で、おおかたの理解としては間違ってはいないのだが、正確には「Unicodeが定める空白文字」を削除する関数である。(更に更にいうと .NET Frameworkのバージョンによって細部の挙動が違う。詳細は[[https://msdn.microsoft.com/ja-jp/library/t97s7bs3%28v=vs.110%29.aspx|MSDN]]を参照の事。) | 言わずもがな、文字列の先頭と末尾に付随する**空白**を削除してくれる関数であるが、**空白**って一体なんなのよというと「**Unicodeが定める空白文字**」である。従って、''Trim()''は文字列の前後からUnicodeが定める空白文字を削除する関数という事になる。(更に言うと.NET Frameworkのバージョンによって細部の挙動が違う。詳細は[[https://msdn.microsoft.com/ja-jp/library/t97s7bs3%28v=vs.110%29.aspx|MSDN]]を参照の事。) |
| |
Unicodeが定める空白文字とはなんぞや?というと、''Char.IsWhiteSpace()''メソッドに引っかかる文字である。これまた詳細はUnicodeの規格書なりWikipediaなりを見て頂くとして、要はいわゆる半角スペース(U+0020)やタブ文字(U+0009)は然ることながら、<fc #ff0000>全角スペース(U+3000)も対象</fc>なのだ。 | んじゃんじゃUnicodeの空白文字ってなんぞ?というと、C#的には''Char.IsWhiteSpace(letter) == true''となる文字である。詳細はUnicodeの規格書なりWikipediaなりを見て頂くとして、true判定になる文字には半角スペース(U+0020)やタブ文字(U+0009)は然ることながら、<fc #ff0000>全角スペース(U+3000)も含まれる</fc>のだ。つまり''Trim()''を使うと全角スペースも奇麗さっぱりなくなっちゃう。なんというか、C/C++の非WIDE文字な文字列操作に慣れている身からすると、直感とは異なる挙動なわけ。 |
| |
今回はこれにハマった。削られちゃマズい全角スペースが見事になくなってて、''Trim()''の挙動を初めて知ったという(´・ω・`) | 今回はこれにハマった。削られちゃマズい全角スペースが見事になくなってて、''Trim()''の挙動を初めて知ったという(´・ω・`) |
'\u200A', // HAIR SPACE | '\u200A', // HAIR SPACE |
'\u200B', // ZERO WIDTH SPACE | '\u200B', // ZERO WIDTH SPACE |
// '\u3000', // IDEOGRAPHIC SPACE | // '\u3000', // IDEOGRAPHIC SPACE -- これが所謂全角スペース |
'\uFEFF' // ZERO WIDTH NO-BREAK SPACE | '\uFEFF' // ZERO WIDTH NO-BREAK SPACE |
}; | }; |
</code> | </code> |
| |
この件とは直接関係ないけど、''TrimStart''と''TrimEnd''なんてメソッドもあったんだね。取り除きたい文字の配列を渡すと、名前それぞれ対象文字列の先頭もしくは末尾から除去してくれる。''Trim''の分割バージョンみたいなやつ、というよりも''Trim''が''TrimStart''と''TrimEnd''の合体技と言った方がいいか。覚えといて損は無さそう。 | この件とは直接関係ないけど、''TrimStart''と''TrimEnd''なんてメソッドもあったんだね。取り除きたい文字の配列を渡すと、対象文字列の先頭もしくは末尾から除去してくれる。''Trim''の分割バージョンみたいなやつ、というよりも''Trim''が''TrimStart''と''TrimEnd''の合体技と言った方がいいか。覚えといて損は無さそう。 |
| |
===== 参考サイト ===== | ===== 参考サイト ===== |
* [[https://msdn.microsoft.com/ja-jp/library/t97s7bs3%28v=vs.110%29.aspx|String.Trim メソッド (System)]] | * [[https://msdn.microsoft.com/ja-jp/library/t97s7bs3%28v=vs.110%29.aspx|String.Trim メソッド (System)]] |
* [[http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=546|.NET Reference Guide | Trimming Character Strings | InformIT]] | * [[http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=546|.NET Reference Guide | Trimming Character Strings | InformIT]] |