半角と全角

よくありがちなユーティリティ。

/**
 * 日本語ユーティリティ
 */
public class JapaneseUtility {
    /** 半角の0x20〜0x7Eの文字 */
    public static final String HANKAKU = 
        " !\"#$%&'()*+,-./"+
        "0123456789:;<=>?"+
        "@ABCDEFGHIJKLMNO"+
        "PQRSTUVWXYZ[\\]^_"+
        "`abcdefghijklmno"+
        "pqrstuvwxyz{|}~";
    
    /** 半角の0x20〜0x7Eに相当する全角文字 */
    public static final String ZENKAKU =
        " !”#$%&’()*+,−./"+
        "0123456789:;<=>?"+
        "@ABCDEFGHIJKLMNO"+
        "PQRSTUVWXYZ[¥]^_"+
        "`abcdefghijklmno"+
        "pqrstuvwxyz{|} ̄";
    /**
     * 全角文字を半角文字に変換します。0x20〜0x7Eまでです。
     * それ以外の文字はそのまま返します。
     */
    public static char convertZenToHan(char c) {
        int index = ZENKAKU.indexOf(c);
        if (index == -1) return c;
        return HANKAKU.charAt(index);
    }
    
    /**
     * 全角文字列を半角文字列に変換します。0x20〜0x7Eまでです。
     * それ以外の文字はそのまま返します。
     */
    public static String convertZenToHan(String s) {
        assert s != null;
        StringBuffer sb = new StringBuffer(s.length());
        for (int i=0; i<s.length(); i++) {
            sb.append(convertZenToHan(s.charAt(i)));
        }
        return sb.toString();
    }
    
    /**
     * 半角文字を全角文字に変換します。0x20〜0x7Eまでです。
     * それ以外の文字はそのまま返します。
     */
    public static char convertHanToZen(char c) {
        int index = HANKAKU.indexOf(c);
        if (index == -1) return c;
        return ZENKAKU.charAt(index);
    }
    
    /**
     * 半角文字列を全角文字列に変換します。0x20〜0x7Eまでです。
     * それ以外の文字はそのまま返します。
     */
    public static String convertHanToZen(String s) {
        assert s != null;
        StringBuffer sb = new StringBuffer(s.length());
        for (int i=0; i<s.length(); i++) {
            sb.append(convertHanToZen(s.charAt(i)));
        }
        return sb.toString();
    }
}

カタカナを載せようと思ったけれど、はてなのブログは半角カタカナが書けないみたい。
なので、全角のみはこちら。
秀丸で半角カタカナにしてくれる。

// 0xA1..0xDF
  "。「」、・ヲァィゥェォャュョッ"+
"ーアイウエオカキクケコサシスセソ"+
"タチツテトナニヌネノハヒフヘホマ"+
"ミムメモヤユヨラリルレロワン゛゜";