IK.AM

@making's tech note


Javaの全角・半角変換ユーティリティ

🗃 {Programming/Java/am/ik/fh4j}
🏷 Java 
🗓 Updated at 2015-09-22T06:22:00Z  🗓 Created at 2015-09-22T06:22:00Z   🌎 English Page

いまさらJavaの全角・半角変換ユーティリティFH4Jを作った。

えんたーぷらいずな開発でよくある機能で、「全角半角 Java」でググると色々サンプルコードは出てくるが、どれも雑なループとハードコードな分岐が入っていてあまり触りたくなかった・・ICU4Jはこの用途のためにはtoo much。

マッピングテーブルを変更しやすい造りのものが欲しかったので作ってみた。

DefaultFullHalf.INSTANCE.toFullwidth("Hello World!"); // -> "Hello World!"
DefaultFullHalf.INSTANCE.toFullwidth("ハローワールド!"); // -> "ハローワールド!"
DefaultFullHalf.INSTANCE.toHalfwidth("Hello World!"); // -> "Hello World!"
DefaultFullHalf.INSTANCE.toHalfwidth("ハローワールド!"); // -> "ハローワールド!"

デフォルトの変換文字のマッピングおよび独自ルールの作り方はDefaultFullHalf.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の呼び出しを増減させればよい。

今時、半角カナとか全角英字とか使うんかいなという感じはするが・・


✒️️ Edit  ⏰ History  🗑 Delete