[index.html]

▼CoffeeMaker開発記▼

■その8・文字列の検索と置換■

●Javaでも他の言語と同様に文字列の検索・置換を行えます。
しかし、Javaは内部でUnicodeを採用している事もあり、他の言語と同じ感覚で文字列を比較・検索・置換する事はあまりオススメできません。
CoffeeMakerでは(と、いうかGUIを採用しているテキストエディタは)大体次のような感じで検索をかけています。

テキストエリア内のテキストをgetText()でStringに格納

検索文字列を獲得

indexOf()により、該当する文字列があれば位置をintで獲得

テキストエリアのキャレットを選択状態にする

検索はこのようにして可能なわけですが、例えば「a」を検索するときに「a」も「A」もヒットさせたい場合は検索方法を定義し直して、文字列を検索します。 検索スタイルは4種類×3種類の計12種類の検索方式があります。 また、そうしたデフォルトで用意されている検索方式の他に、全く独自の検索方式を定義することも可能です。詳しくはアスキーから出版された「Java プログラミング・ノート 国際化と日本語処理(風間一洋 著)」に詳細な解説があります。

置換は一見StringBufferを利用すると、リソースの節約にもなりそうですし、色々と便利そうですが、そのままでは使えないようです。
理由は、「文字列の検索が出来ない(=indexOf()が無い)」「置換が単文字(=キャラクタ単位)で、しかも一括処理」だからです。
じゃあ、StringBufferクラスを拡張して…というわけにもいかず(StringBufferはfinalクラス)、無駄なStringオブジェクトが大量に出力されまくるのを我慢して文字列置換を行うしかないようです…。

一応、検索はStringで行い、置換時にStringBufferに結果を溜め込みつつ、最後にStringに戻す(=toString())という行動をとることによって、リソースを節約することが出来そうです(というか、StringBuffer#toString()のAPIリファレンスにはそのような利用法を推奨しているっぽい記述が…)。

[前の話][トップページ][Java Software][CoffeeMakerトップ][次の話]