.NET TIPS 文字列を1文字ずつ解析するには?(サロゲート文字対応)[C#、VB]デジタルアドバンテージ 一色 政彦2008/04/24 |
![]() |
文字列を加工するなどの目的で、文字列の内容を解析したいような場合がある。この際、一般的には正規表現を利用するが(参考「TIPS:正規表現を使って部分文字列を取得するには?」「TIPS:正規表現を使って文字列から部分文字列を取り除くには?」)、もちろん1文字ずつ解析して処理することもできる(正規表現の方がコードがシンプルになるので便利だが、処理速度が遅くなる場合がある。筆者はコードはかっこ悪くても処理速度の速い「1文字ずつの解析処理」を好んでよく用いる)。本稿ではこの1文字ずつの解析処理の方法を紹介する。
なお、最近ではWindows Vistaの登場などにより、(エンド・ユーザーによって)Unicodeのサロゲート文字が入力される可能性があり、それが文字列解析の処理で問題となる場合もある。サロゲート文字(もしくはサロゲート・ペア文字)とは、通常「1文字=2bytes」のところが、「1文字=4bytes」となることがある文字だ。そこで本稿では、サロゲート文字も考慮した文字列解析処理について説明する。
文字列解析処理
(サロゲート文字を考慮しながら)文字列を1文字ずつ処理するには、TextElementEnumeratorオブジェクト(System.Globalization名前空間のTextElementEnumeratorクラスのオブジェクト)を使用する。
TextElementEnumeratorオブジェクトは、処理したい文字列をパラメータに指定して、StringInfoクラス(System.Globalization名前空間)の静的メソッドであるGetTextElementEnumeratorメソッドを呼び出せば取得できる。
実際にTextElementEnumeratorオブジェクトを使って1文字ずつ処理するには、まずMoveNextメソッド(パラメータなし)を呼び出して次の1文字を処理対象とし、Currentプロパティからその文字を取得する(Object型であるが、実際の内容は1文字の文字列)。注意点としては、MoveNextメソッドを呼び出して初めて最初の1文字が取得できることだ(MoveNextメソッドを呼び出さずに、Currentプロパティを使うことはできない)。
次の画面は、文字列を1文字ずつ処理するWindowsアプリケーションのサンプル・プログラムである。
![]() |
| 文字列を1文字ずつ処理するWindowsアプリケーションの実行例 |
| このアプリケーションでは[処理実行]ボタンをクリックすると、上のテキストボックスに入力された文字列を1文字ごとに分解して、それぞれの文字を「 」で囲んで再びすべてを1つ文字列に結合し、それを下のテキストボックス(textBox2)に設定する。 |
このアプリケーションでは[処理実行]ボタン(button1)をクリックすると、上のテキストボックス(textBox1)に入力された文字列を、上記の説明の手順で処理し、処理後の文字列を下のテキストボックス(textBox2)に設定する。その処理内容が、次のコード(の太字部分)である。
|
||
| 文字列を1文字ずつ処理するWindowsアプリケーションのサンプル・プログラム(上:C#、下:VB) |
ちなみにTextElementEnumeratorオブジェクトのElementIndexプロパティからは、文字(=テキスト要素)のインデックス番号を取得できる。取得した1文字(=Stringオブジェクト)がサロゲート文字かどうかを調べるには、「TIPS:サロゲート文字かどうかを判定するには?」の方法を使えばよい。![]()
| カテゴリ:クラス・ライブラリ 処理対象:文字列 使用ライブラリ:TextElementEnumeratorクラス(System.Globalization名前空間) 使用ライブラリ:StringInfoクラス(System.Globalization名前空間) 関連TIPS:サロゲート文字かどうかを判定するには? 関連TIPS:正規表現を使って部分文字列を取得するには? 関連TIPS:正規表現を使って文字列から部分文字列を取り除くには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



