Javaでの半角 ⇒ 全角変換などの実装は簡単だった

ちょっと仕事でJavaでの半角全角変換など実装してみた。案外楽だった。
JavaはStringインスタンスの時点でUTF-16文字列となっていることがかなり有利に働く。少なくともJavaではそこまで文字変換を怖がる必要はないっぽい。

文字変換の実装には下記のパターンを思いついた。

  • 単純に特定範囲にオフセットを足せばよいもの(全角英数字・一部記号 ⇔ 半角英数字・一部記号、ひらがな ⇔ カタカナ変換)
  • char[]のテーブルを作成しておいて、それを参照するもの。(半角カナ ⇒ 全角カナ変換)
  • 2文字から1文字に集約するもの(半角濁音カナ ⇒ 全角濁音カナ, 例としてはガ ⇒ ガ。)
  • 巨大なswitch文で対処しなければならないもの。(1対1対応している変換ではかなり使いやすい)

巨大なswitch文とはこういうもののことをいう:

// char c;
switch (c){
   case '\u3000':
     return '\u0020';
   case '...':
     return ....;
   :
   :
}

コードポイントの並び順や変換文字の写像に法則性もへったくれもない時にはswitch文のパターンはかなり役に立つ。