現在リニューアル中 → 旧サイトはこちら

全角/半角変換

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

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

半角カタカナ/全角カタカナ変換テーブル // 半角カタカナ<-->全角カタカナ変換テーブル private static final String kanaTbl[][] = { // 2文字構成の濁点付き半角カナ // 必ずテーブルに先頭に置いてサーチ順を優先すること { "ガ", "ガ" }, { "ギ", "ギ" }, { "グ", "グ" }, { "ゲ", "ゲ" }, { "ゴ", "ゴ" }, { "ザ", "ザ" }, { "ジ", "ジ" }, { "ズ", "ズ" }, { "ゼ", "ゼ" }, { "ゾ", "ゾ" }, { "ダ", "ダ" }, { "ヂ", "ヂ" }, { "ヅ", "ヅ" }, { "デ", "デ" }, { "ド", "ド" }, { "バ", "バ" }, { "ビ", "ビ" }, { "ブ", "ブ" }, { "ベ", "ベ" }, { "ボ", "ボ" }, { "パ", "パ" }, { "ピ", "ピ" }, { "プ", "プ" }, { "ペ", "ペ" }, { "ポ", "ポ" }, { "ヴ", "ヴ" }, // 1文字構成の半角カナ { "ア", "ア" }, { "イ", "イ" }, { "ウ", "ウ" }, { "エ", "エ" }, { "オ", "オ" }, { "カ", "カ" }, { "キ", "キ" }, { "ク", "ク" }, { "ケ", "ケ" }, { "コ", "コ" }, { "サ", "サ" }, { "シ", "シ" }, { "ス", "ス" }, { "セ", "セ" }, { "ソ", "ソ" }, { "タ", "タ" }, { "チ", "チ" }, { "ツ", "ツ" }, { "テ", "テ" }, { "ト", "ト" }, { "ナ", "ナ" }, { "ニ", "ニ" }, { "ヌ", "ヌ" }, { "ネ", "ネ" }, { "ノ", "ノ" }, { "ハ", "ハ" }, { "ヒ", "ヒ" }, { "フ", "フ" }, { "ヘ", "ヘ" }, { "ホ", "ホ" }, { "マ", "マ" }, { "ミ", "ミ" }, { "ム", "ム" }, { "メ", "メ" }, { "モ", "モ" }, { "ヤ", "ヤ" }, { "ユ", "ユ" }, { "ヨ", "ヨ" }, { "ラ", "ラ" }, { "リ", "リ" }, { "ル", "ル" }, { "レ", "レ" }, { "ロ", "ロ" }, { "ワ", "ワ" }, { "ヲ", "ヲ" }, { "ン", "ン" }, { "ァ", "ァ" }, { "ィ", "ィ" }, { "ゥ", "ゥ" }, { "ェ", "ェ" }, { "ォ", "ォ" }, { "ャ", "ャ" }, { "ュ", "ュ" }, { "ョ", "ョ" }, { "ッ", "ッ" }, { "。", "。" }, { "「", "「" }, { "」", "」" }, { "、", "、" }, { "・", "・" }, { "ー", "ー" }, { "", "" } }; 半角カタカナ → 全角カタカナ変換 public static String HtoZ_Kkana(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 < kanaTbl.length; j++) { if (p.substring(i).startsWith(kanaTbl[j][0])) { sb.append(kanaTbl[j][1]); i += kanaTbl[j][0].length() - 1; break; } } // 検索できなければ、変換しない if (j >= kanaTbl.length) { sb.append(c); } } else { // Unicode半角カタカナ以外なら変換しない sb.append(c); } } return sb.toString(); } 全角カタカナ → 半角カタカナ変換 public static String ZtoH_Kkana(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 < kanaTbl.length; j++) { if (p.substring(i).startsWith(kanaTbl[j][1])) { sb.append(kanaTbl[j][0]); break; } } // 検索できなければ、変換しない if (j >= kanaTbl.length) { sb.append(c); } } else { // 全角カタカナ以外なら変換しない sb.append(c); } } return sb.toString(); }

全角カタカナ/全角ひらがな変換

全角カタカナはUnicodeで「0x30A1~0x30FF」の84文字、全角ひらがなはUnicodeで「0x3041~0x3094」の84文字で、1対1に対応します。
変換には、その差分値「0x0060」を加算・減算することによって行います。

全角カタカナ → 全角ひらがな変換 public static String Kkana_Hkana(String p) { StringBuffer sb = new StringBuffer(); for (int i = 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)0x30f3)) <= 0) { // 全角カナ文字から0x0060を減算して全角かな文字に変換する Character x = new Character((char) (c.charValue() - (new Character((char)0x0060)).charValue())); sb.append(x); } else { // 全角カタカナ以外なら変換しない sb.append(c); } } // 変換後文字列を戻します return sb.toString(); } 全角ひらがな全角カタカナ → 全角カタカナ変換 public static String Hkana_Kkana(String p) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < p.length(); i++) { Character c = new Character(p.charAt(i)); // Unicode全角ひらがなのコード範囲(ぁ~ん)であるか? if (c.compareTo(new Character((char)0x3041)) >= 0 && c.compareTo(new Character((char)0x3093)) <= 0) { // 全角かな文字に0x0060を加算して全角カナ文字に変換 Character x = new Character((char) (c.charValue() + (new Character((char)0x0060)).charValue())); sb.append(x); } else { // 全角カタカナ以外なら変換しない sb.append(c); } } return sb.toString(); }

半角英数字/全角ラテン英数字変換

半角英数字はUnicodeで「0x0021~0x007E」の94文字、全角英数字はUnicodeで「0xFF01~0xFF5E」の94文字で、1対1に対応します。
変換には、その差分値「0xFFE0」を加算・減算することによって行います。

半角英数字 → 全角英数字変換 public static String HtoZ_Alpha(String p) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < p.length(); i++) { Character c = new Character(p.charAt(i)); // Unicode半角ラテン文字のコード範囲(!~~)であるか? if (c.compareTo(new Character((char)0x0021)) >= 0 && c.compareTo(new Character((char)0x007e)) <= 0) { // 変換文字に0xfee0を加算して全角文字に変換する Character x = new Character((char) (c.charValue() + (new Character((char)0xfee0)).charValue())); sb.append(x); } else { // 半角ラテン文字以外なら変換しない sb.append(c); } } return sb.toString(); } 全角英数字 → 半角英数字変換 public static String ZtoH_Alpha(String p) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < p.length(); i++) { Character c = new Character(p.charAt(i)); // Unicode全角ラテン文字のコード範囲(!から~)であるか? if (c.compareTo(new Character((char)0xff01)) >= 0 && c.compareTo(new Character((char)0xff5e)) <= 0) { // 変換文字から0xfee0を減算して半角文字に変換します Character x = new Character((char) (c.charValue() - (new Character((char)0xfee0)).charValue())); sb.append(x); } else { // 全角ラテン文字以外なら変換しない sb.append(c); } } return sb.toString(); }