JavaのUnicode補助文字対応
Javaで文字を扱うプログラムを書いているとJavaのUnicode補助文字対応はちょっと足りないなぁと思うことがよくあります。特に文字列やそれに類するもの(eclipseのIDocumentなど)をイテレートする際にもう少し使いやすいユーティリティがあってもいいように思います。
Characterクラスには以下のようなプリミティブなメソッドがあります。
- Character.codePointAt(seq, index)
- Character.charCount(codePoint)
- Character.codePointBefore(seq, index)
これらを使えばある程度のことはできるのですが、実際にやりたいのはイテレートなのでもっと直接的にCodePointIteratorのようなものがほしいのです。
実際、Webを調べてみるとたとえば
http://www.itarchitect.jp/technology_and_programming/-/51291.html
にその実装例があります。
自分でコーディングした範囲では次の2つがあるといいと思います。
- CodePointIterator
- CharSequenceのスケルトンクラス
- subSequenceのデフォルト実装を用意して欲しい
この2つがあれば、自分の操作対象をCharSequenceにするアダプタクラスを書くだけで文字のイテレーションができるようになります。CodePointIteratorが双方向だと良いのは実際に逆向きに処理する場合があるのと、正向きであっても字句解析的にはpushbackが必要だからです。
More Emacsでは、CodePointIteratorとIDocumentをCharSequenceにするアダプタを作って補助文字対応しました。