差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
blog:2015:2015-09-17 [2017-01-04 16:19]
Decomo
blog:2015:2015-09-17 [2018-06-23 12:45] (現在)
Decomo
行 3: 行 3:
 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の空白文字ってなんぞ?というと、C#的には''Char.IsWhiteSpace(letter) == true''となる文字である。詳細はUnicodeの規格書なりWikipediaなりを見て頂くとして、定はいわゆる半角スペース(U+0020)やタブ文字(U+0009)は然ることながら、<fc #ff0000>全角スペース(U+3000)も含まれる</fc>のだ。つまり''Trim()''を使うと全角スペースも奇麗さっぱりなくなっちゃう。なんというか、C/C++の非WIDE文字な文字列操作に慣れている身からすると、直感とは異なる挙動なわけ。+んじゃんじゃUnicodeの空白文字ってなんぞ?というと、C#的には''Char.IsWhiteSpace(letter) == true''となる文字である。詳細はUnicodeの規格書なりWikipediaなりを見て頂くとして、true判定に文字には半角スペース(U+0020)やタブ文字(U+0009)は然ることながら、<fc #ff0000>全角スペース(U+3000)も含まれる</fc>のだ。つまり''Trim()''を使うと全角スペースも奇麗さっぱりなくなっちゃう。なんというか、C/C++の非WIDE文字な文字列操作に慣れている身からすると、直感とは異なる挙動なわけ。
  
 今回はこれにハマった。削られちゃマズい全角スペースが見事になくなってて、''Trim()''の挙動を初めて知ったという(´・ω・`) 今回はこれにハマった。削られちゃマズい全角スペースが見事になくなってて、''Trim()''の挙動を初めて知ったという(´・ω・`)
行 34: 行 34:
         '\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
     };     };
  • blog/2015/2015-09-17.txt
  • 最終更新: 2018-06-23 12:45
  • by Decomo