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("アイウエオ")); // ... こんな感じ }; };
ソースコード置き場
http://code.google.com/p/kanaxs/source/browse/trunk/src/java/com/googlecode/kanaxs/KanaUtil.java
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(); }; };