--- title: Javaの全角・半角変換ユーティリティ tags: ["Java"] categories: ["Programming", "Java", "am", "ik", "fh4j"] date: 2015-09-22T06:22:00Z updated: 2015-09-22T06:22:00Z --- いまさらJavaの全角・半角変換ユーティリティ[FH4J](https://github.com/making/fh4j)を作った。 えんたーぷらいずな開発でよくある機能で、「全角半角 Java」でググると色々サンプルコードは出てくるが、どれも雑なループとハードコードな分岐が入っていてあまり触りたくなかった・・ICU4Jはこの用途のためにはtoo much。 マッピングテーブルを変更しやすい造りのものが欲しかったので作ってみた。 ``` java DefaultFullHalf.INSTANCE.toFullwidth("Hello World!"); // -> "Hello World!" DefaultFullHalf.INSTANCE.toFullwidth("ハローワールド!"); // -> "ハローワールド!" DefaultFullHalf.INSTANCE.toHalfwidth("Hello World!"); // -> "Hello World!" DefaultFullHalf.INSTANCE.toHalfwidth("ハローワールド!"); // -> "ハローワールド!" ``` デフォルトの変換文字のマッピングおよび独自ルールの作り方は[DefaultFullHalf.java](https://github.com/making/fh4j/blob/master/src/main/java/fh4j/DefaultFullHalf.java)を見ればわかると思う。 たとえばカタカナだけ変換したいユーティリティを作りたい場合は以下のようなクラスを作れば良い。 ``` java public class KatakanaFullHalf { public static final FullHalfConverter INSTANCE = new FullHalfConverter( new FullHalfPairsBuilder() .pair("ァ", "ァ") .pair("ィ", "ィ") .pair("ゥ", "ゥ") .pair("ェ", "ェ") .pair("ォ", "ォ") .pair("ャ", "ャ") .pair("ュ", "ュ") .pair("ョ", "ョ") .pair("ッ", "ッ") .pair("ー", "ー") .pair("ア", "ア") .pair("イ", "イ") .pair("ウ", "ウ") .pair("エ", "エ") .pair("オ", "オ") .pair("カ", "カ") .pair("キ", "キ") .pair("ク", "ク") .pair("ケ", "ケ") .pair("コ", "コ") .pair("サ", "サ") .pair("シ", "シ") .pair("ス", "ス") .pair("セ", "セ") .pair("ソ", "ソ") .pair("タ", "タ") .pair("チ", "チ") .pair("ツ", "ツ") .pair("テ", "テ") .pair("ト", "ト") .pair("ナ", "ナ") .pair("ニ", "ニ") .pair("ヌ", "ヌ") .pair("ネ", "ネ") .pair("ノ", "ノ") .pair("ハ", "ハ") .pair("ヒ", "ヒ") .pair("フ", "フ") .pair("ヘ", "ヘ") .pair("ホ", "ホ") .pair("マ", "マ") .pair("ミ", "ミ") .pair("ム", "ム") .pair("メ", "メ") .pair("モ", "モ") .pair("ヤ", "ヤ") .pair("ユ", "ユ") .pair("ヨ", "ヨ") .pair("ラ", "ラ") .pair("リ", "リ") .pair("ル", "ル") .pair("レ", "レ") .pair("ロ", "ロ") .pair("ワ", "ワ") .pair("ヲ", "ヲ") .pair("ン", "ン") .pair("ガ", "ガ") .pair("ギ", "ギ") .pair("グ", "グ") .pair("ゲ", "ゲ") .pair("ゴ", "ゴ") .pair("ザ", "ザ") .pair("ジ", "ジ") .pair("ズ", "ズ") .pair("ゼ", "ゼ") .pair("ゾ", "ゾ") .pair("ダ", "ダ") .pair("ヂ", "ヂ") .pair("ヅ", "ヅ") .pair("デ", "デ") .pair("ド", "ド") .pair("バ", "バ") .pair("ビ", "ビ") .pair("ブ", "ブ") .pair("べ", "ベ") .pair("ボ", "ボ") .pair("パ", "パ") .pair("ピ", "ピ") .pair("プ", "プ") .pair("ペ", "ペ") .pair("ポ", "ポ") .pair("ヴ", "ヴ") .pair(String.valueOf('\u30f7'), "ヷ") .pair(String.valueOf('\u30fa'), "ヺ") .pair("゛", "゙") .pair("゜", "゚") .build()); } ``` 変換先が気に入らなかったら`pair`の呼び出しを増減させればよい。 今時、半角カナとか全角英字とか使うんかいなという感じはするが・・