Kana.JSをJavaに移植してみました

全角カタカナ⇔半角カタカナや、ひらがな⇔カタカナに変換するライブラリーKana.XSをJavaに移植してみました。バグとりをした後にこっちにあげておきます。GitHub - shogo4405/KanaXS: ひらがな⇔カタカナ。全角英数字⇔半角英数字。全角カタカナ⇔半角カタカナ相互変換ライブラリーのJS、AS3、JavaScript版
Javaでこういう処理をするときは、http://www.icu-project.org/とか使うと思います。

ライセンス

修正BSDライセンス

使い方

// 1.KanaUtilクラスをインポート
import com.googlecode.kanaxs.KanaUtil;

public class Main
{
    public static void main(String[] args)
    {
        // 2.メソッドを利用する。
        System.out.println(KanaUtil.toHankakuCase("ABCDEFG")); // ABCDFEG
        System.out.println(KanaUtil.toZenkakuCase("ABCDEFG"));
        System.out.ptinrln(KanaUtil.toZenkanaCase("アイウエオ"));
        System.out.ptintln(KanaUtil.toHiraganaCase("アイウエオ"));

        // ... こんな感じ

    };
};

ToDo

  • toPaddinCaseの実装をする。

2009/10/24時点でのソース

public final class KanaUtil
{
        // 半角カタカナを全角カタカナにするマッピング
        private static final HashMap<Character, Character> H2Z = new HashMap<Character, Character>();

        // 全角カタカナを半角カタカナにするマッピング
        private static final HashMap<Character, Character> Z2H = new HashMap<Character, Character>();

        static
        {
                H2Z.put((char)0xFF67,(char)0x30A1);
                H2Z.put((char)0xFF68,(char)0x30A3);
                H2Z.put((char)0xFF69,(char)0x30A5);
                H2Z.put((char)0xFF6A,(char)0x30A7);
                H2Z.put((char)0xFF6B,(char)0x30A9);
                H2Z.put((char)0xFF70,(char)0x30FC);
                H2Z.put((char)0xFF71,(char)0x30A2);
                H2Z.put((char)0xFF72,(char)0x30A4);
                H2Z.put((char)0xFF73,(char)0x30A6);
                H2Z.put((char)0xFF74,(char)0x30A8);
                H2Z.put((char)0xFF75,(char)0x30AA);
                H2Z.put((char)0xFF76,(char)0x30AB);
                H2Z.put((char)0xFF77,(char)0x30AD);
                H2Z.put((char)0xFF78,(char)0x30AF);
                H2Z.put((char)0xFF79,(char)0x30B1);
                H2Z.put((char)0xFF7A,(char)0x30B3);
                H2Z.put((char)0xFF7B,(char)0x30B5);
                H2Z.put((char)0xFF7C,(char)0x30B7);
                H2Z.put((char)0xFF7D,(char)0x30B9);
                H2Z.put((char)0xFF7E,(char)0x30BB);
                H2Z.put((char)0xFF7F,(char)0x30BD);
                H2Z.put((char)0xFF80,(char)0x30BF);
                H2Z.put((char)0xFF81,(char)0x30C1);
                H2Z.put((char)0xFF82,(char)0x30C4);
                H2Z.put((char)0xFF83,(char)0x30C6);
                H2Z.put((char)0xFF84,(char)0x30C8);
                H2Z.put((char)0xFF85,(char)0x30CA);
                H2Z.put((char)0xFF86,(char)0x30CB);
                H2Z.put((char)0xFF87,(char)0x30CC);
                H2Z.put((char)0xFF88,(char)0x30CD);
                H2Z.put((char)0xFF89,(char)0x30CE);
                H2Z.put((char)0xFF8A,(char)0x30CF);
                H2Z.put((char)0xFF8B,(char)0x30D2);
                H2Z.put((char)0xFF8C,(char)0x30D5);
                H2Z.put((char)0xFF8D,(char)0x30D8);
                H2Z.put((char)0xFF8E,(char)0x30DB);
                H2Z.put((char)0xFF8F,(char)0x30DE);
                H2Z.put((char)0xFF90,(char)0x30DF);
                H2Z.put((char)0xFF91,(char)0x30E0);
                H2Z.put((char)0xFF92,(char)0x30E1);
                H2Z.put((char)0xFF93,(char)0x30E2);
                H2Z.put((char)0xFF94,(char)0x30E4);
                H2Z.put((char)0xFF95,(char)0x30E6);
                H2Z.put((char)0xFF95,(char)0x30E8);
                H2Z.put((char)0xFF97,(char)0x30E9);
                H2Z.put((char)0xFF98,(char)0x30EA);
                H2Z.put((char)0xFF99,(char)0x30EB);
                H2Z.put((char)0xFF9A,(char)0x30EC);
                H2Z.put((char)0xFF9B,(char)0x30ED);
                H2Z.put((char)0xFF9C,(char)0x30EF);
                H2Z.put((char)0xFF9D,(char)0x30F3);
                H2Z.put((char)0xFF9E,(char)0x309B);
                H2Z.put((char)0xFF9F,(char)0x309C);
                H2Z.put((char)0xFF66,(char)0x30F2);

                Z2H.put((char)0x30A1,(char)0xFF67);
                Z2H.put((char)0x30A3,(char)0xFF68);
                Z2H.put((char)0x30A5,(char)0xFF69);
                Z2H.put((char)0x30A7,(char)0xFF6A);
                Z2H.put((char)0x30A9,(char)0xFF6B);
                Z2H.put((char)0x30FC,(char)0xFF70);
                Z2H.put((char)0x30A2,(char)0xFF71);
                Z2H.put((char)0x30A4,(char)0xFF72);
                Z2H.put((char)0x30A6,(char)0xFF73);
                Z2H.put((char)0x30A8,(char)0xFF74);
                Z2H.put((char)0x30AA,(char)0xFF75);
                Z2H.put((char)0x30AB,(char)0xFF76);
                Z2H.put((char)0x30AD,(char)0xFF77);
                Z2H.put((char)0x30AF,(char)0xFF78);
                Z2H.put((char)0x30B1,(char)0xFF79);
                Z2H.put((char)0x30B3,(char)0xFF7A);
                Z2H.put((char)0x30B5,(char)0xFF7B);
                Z2H.put((char)0x30B7,(char)0xFF7C);
                Z2H.put((char)0x30B9,(char)0xFF7D);
                Z2H.put((char)0x30BB,(char)0xFF7E);
                Z2H.put((char)0x30BD,(char)0xFF7F);
                Z2H.put((char)0x30BF,(char)0xFF80);
                Z2H.put((char)0x30C1,(char)0xFF81);
                Z2H.put((char)0x30C4,(char)0xFF82);
                Z2H.put((char)0x30C6,(char)0xFF83);
                Z2H.put((char)0x30C8,(char)0xFF84);
                Z2H.put((char)0x30CA,(char)0xFF85);
                Z2H.put((char)0x30CB,(char)0xFF86);
                Z2H.put((char)0x30CC,(char)0xFF87);
                Z2H.put((char)0x30CD,(char)0xFF88);
                Z2H.put((char)0x30CE,(char)0xFF89);
                Z2H.put((char)0x30CF,(char)0xFF8A);
                Z2H.put((char)0x30D2,(char)0xFF8B);
                Z2H.put((char)0x30D5,(char)0xFF8C);
                Z2H.put((char)0x30D8,(char)0xFF8D);
                Z2H.put((char)0x30DB,(char)0xFF8E);
                Z2H.put((char)0x30DE,(char)0xFF8F);
                Z2H.put((char)0x30DF,(char)0xFF90);
                Z2H.put((char)0x30E0,(char)0xFF91);
                Z2H.put((char)0x30E1,(char)0xFF92);
                Z2H.put((char)0x30E2,(char)0xFF93);
                Z2H.put((char)0x30E4,(char)0xFF94);
                Z2H.put((char)0x30E6,(char)0xFF95);
                Z2H.put((char)0x30E8,(char)0xFF96);
                Z2H.put((char)0x30E9,(char)0xFF97);
                Z2H.put((char)0x30EA,(char)0xFF98);
                Z2H.put((char)0x30EB,(char)0xFF99);
                Z2H.put((char)0x30EC,(char)0xFF9A);
                Z2H.put((char)0x30ED,(char)0xFF9B);
                Z2H.put((char)0x30EF,(char)0xFF9C);
                Z2H.put((char)0x30F2,(char)0xFF66);
                Z2H.put((char)0x30F3,(char)0xFF9D);
                Z2H.put((char)0x30C3,(char)0xFF6F);
        };

        /**
         * 全角カタカナを半角カタカナに変換します。
         * @return 半角カタカナ文字列
         */
        public static String toHankanaCase(String str)
        {
                char[] chars = {0xFF9E, 0xFF9F};
                StringBuilder buffer = new StringBuilder();

                for(int i=0;i<str.length();i++)
                {
                        char c = str.charAt(i);

                        if(Z2H.containsKey(c)){
                                buffer.append(Z2H.get(c));
                        } else if(0x30AB <= c && c <= 0x30C9){
                                buffer.append(Z2H.get((char)(c - 1))).append(0xFF9E);
                        } else if(0x30CF <= c && c <= 0x30DD) {
                                buffer.append(Z2H.get((char)(c - c % 3))).append(chars[c % 3 - 1]);
                        } else {
                                buffer.append(c);
                        };
                };

                return buffer.toString();
        };

        /**
         * 半角カタカナを全角カタカナに変換します。
         * @return {String}
         */
        public static String toZenkanaCase(String str)
        {
                StringBuilder buffer = new StringBuilder(str);

                for(int i=0;i<str.length();i++)
                {
                        char c = str.charAt(i);
                        if(H2Z.containsKey(c)){
                                buffer.setCharAt(i, H2Z.get(c));
                        };
                };

                return buffer.toString();
        };

        /**
         * 全角ひらがなを全角カタカナに変換します。
         * @return 全角カタカナ
         */
        public static String toKatakanaCase(String str)
        {
                StringBuilder buffer = new StringBuilder(str);

                for(int i=0;i<str.length();i++)
                {
                        char c = str.charAt(i);
                        if(0x3041 <= c && c <= 0x3096){
                                buffer.setCharAt(i, (char)(c + 0x0060));
                        };
                };

                return buffer.toString();
        };

        /**
         * 全角カタカナを全角ひらがなに変換します。
         * @return 全角ひらがなの文字列
         */
        public static String toHiraganaCase(String str)
        {
                StringBuilder buffer = new StringBuilder(str);

                for(int i=0;i<str.length();i++)
                {
                        char c = str.charAt(i);
                        if(0x30A1 <= c && c <= 0x30F6){
                                buffer.setCharAt(i, (char)(c - 0x0060));
                        };
                };


                return buffer.toString();
        };

        /**
         * 全角英数字を半角英数字に変換します。
         * @return 半角英数字文字列
         */
        public static String toHankakuCase(String str)
        {
                StringBuilder buffer = new StringBuilder(str);
               
                for(int i=0;i<str.length();i++)
                {
                        char c = str.charAt(i);

                        // 【!】〜【〜】の範囲
                        if(0xFF01 <= c && c <= 0xFF5E)
                        {
                                buffer.setCharAt(i, (char)(c - 0xFEE0));
                                continue;
                        };
                        // 全角スペース
                        if(c == 0x3000)
                        {
                                buffer.setCharAt(i, (char)0x0020);
                                continue;
                        };
                };

                return buffer.toString();
        };

        /**
         * 半角英数字を全角英数字に変換します。
         * @return 全角英数字
         */
        public static String toZenkakuCase(String str)
        {
                StringBuilder buffer = new StringBuilder(str);

                for(int i=0;i<str.length();i++)
                {
                        char c = str.charAt(i);

                        // 【!】〜【〜】の範囲
                        if(c <= 0x007E && 0x0021 <= c)
                        {
                                buffer.setCharAt(i, (char)(c + 0xFEE0));
                                continue;
                        };

                        // 半角スペース
                        if(c == 0x0020)
                        {
                                buffer.setCharAt(i, (char)0x3000);
                                continue;
                        };
                };

                return buffer.toString();
        };
};