<半角カタカナ/全角カタカナ変換>

半角カタカナとして認識するコード範囲は、「0xFF610〜xFF9F」の63文字とします。
全角カタカナとして認識するコード範囲は、「0x30A10〜x30FC」に、「0x3001(,)」、「0x3002(.)」、「0x300C(「)」、「0x300D(」)」、「0x309B(゛)」、「0x309C(゜)」を加えた98文字とします。
半角カタカナと全角カタカナはUnicode表上での出現順序がまったく異なるため、テーブルを使って変換します。

半角カタカナ/全角カタカナ変換テーブル private static final String kanaHanZenTbl[][] = { // 2文字構成の濁点付き半角カナ // 必ずテーブルに先頭に置いてサーチ順を優先すること { "ガ", "ガ" }, { "ギ", "ギ" }, { "グ", "グ" }, { "ゲ", "ゲ" }, { "ゴ", "ゴ" }, { "ザ", "ザ" }, { "ジ", "ジ" }, { "ズ", "ズ" }, { "ゼ", "ゼ" }, { "ゾ", "ゾ" }, { "ダ", "ダ" }, { "ヂ", "ヂ" }, { "ヅ", "ヅ" }, { "デ", "デ" }, { "ド", "ド" }, { "バ", "バ" }, { "ビ", "ビ" }, { "ブ", "ブ" }, { "ベ", "ベ" }, { "ボ", "ボ" }, { "パ", "パ" }, { "ピ", "ピ" }, { "プ", "プ" }, { "ペ", "ペ" }, { "ポ", "ポ" }, { "ヴ", "ヴ" }, // 1文字構成の半角カナ { "ア", "ア" }, { "イ", "イ" }, { "ウ", "ウ" }, { "エ", "エ" }, { "オ", "オ" }, { "カ", "カ" }, { "キ", "キ" }, { "ク", "ク" }, { "ケ", "ケ" }, { "コ", "コ" }, { "サ", "サ" }, { "シ", "シ" }, { "ス", "ス" }, { "セ", "セ" }, { "ソ", "ソ" }, { "タ", "タ" }, { "チ", "チ" }, { "ツ", "ツ" }, { "テ", "テ" }, { "ト", "ト" }, { "ナ", "ナ" }, { "ニ", "ニ" }, { "ヌ", "ヌ" }, { "ネ", "ネ" }, { "ノ", "ノ" }, { "ハ", "ハ" }, { "ヒ", "ヒ" }, { "フ", "フ" }, { "ヘ", "ヘ" }, { "ホ", "ホ" }, { "マ", "マ" }, { "ミ", "ミ" }, { "ム", "ム" }, { "メ", "メ" }, { "モ", "モ" }, { "ヤ", "ヤ" }, { "ユ", "ユ" }, { "ヨ", "ヨ" }, { "ラ", "ラ" }, { "リ", "リ" }, { "ル", "ル" }, { "レ", "レ" }, { "ロ", "ロ" }, { "ワ", "ワ" }, { "ヲ", "ヲ" }, { "ン", "ン" }, { "ァ", "ァ" }, { "ィ", "ィ" }, { "ゥ", "ゥ" }, { "ェ", "ェ" }, { "ォ", "ォ" }, { "ャ", "ャ" }, { "ュ", "ュ" }, { "ョ", "ョ" }, { "ッ", "ッ" }, { "。", "。" }, { "「", "「" }, { "」", "」" }, { "、", "、" }, { "・", "・" }, { "ー", "ー" }, { "", "" } }; 半角カタカナ → 全角カタカナ変換 public static String HanToZenForKKana(String p) { StringBuffer sb = new StringBuffer(); for (int i = 0, j = 0; i < p.length(); i++) { Character c = new Character(p.charAt(i)); // Unicode半角カタカナのコード範囲か? if (c.compareTo(new Character((char)0xff61)) >= 0 && c.compareTo(new Character((char)0xff9f)) <= 0) { // 半角全角変換テーブルを検索する for (j = 0; j < kanaHanZenTbl.length; j++) { if (p.substring(i).startsWith(kanaHanZenTbl[j][0])) { sb.append(kanaHanZenTbl[j][1]); i += kanaHanZenTbl[j][0].length() - 1; break; } } // 検索できなければ、変換しない if (j >= kanaHanZenTbl.length) { sb.append(c); } } else { // Unicode半角カタカナ以外なら変換しない sb.append(c); } } return sb.toString(); } 全角カタカナ → 半角カタカナ変換 public static String ZenToHanForKKana(String p) { StringBuffer sb = new StringBuffer(); for (int i = 0, j = 0; i < p.length(); i++) { Character c = new Character(p.charAt(i)); // Unicode全角カタカナのコード範囲か? if (c.compareTo(new Character((char)0x30a1)) >= 0 && c.compareTo(new Character((char)0x30fc)) <= 0) { // 半角全角変換テーブルを検索する for (j = 0; j < kanaHanZenTbl.length; j++) { if (p.substring(i).startsWith(kanaHanZenTbl[j][1])) { sb.append(kanaHanZenTbl[j][0]); break; } } // 検索できなければ、変換しない if (j >= kanaHanZenTbl.length) { sb.append(c); } } else { // 全角カタカナ以外なら変換しない sb.append(c); } } return sb.toString(); } このサンプルコードは、JAVA PRESS (vol.32)掲載の守屋利之氏のサンプルコードを元に作成しました。