package ee.esutoniagodesu.util.lang.lingv; import java.util.HashMap; import java.util.Map; public final class JCKana { public static final Map<Character, String> KATAKANA_TO_ROMAJI = new HashMap<Character, String>() {{ put('ア', "a"); put('イ', "i"); put('ウ', "u"); put('エ', "e"); put('オ', "o"); put('カ', "ka"); put('ガ', "ga"); put('キ', "ki"); put('ギ', "gi"); put('ク', "ku"); put('グ', "gu"); put('ケ', "ke"); put('ゲ', "ge"); put('コ', "ko"); put('ゴ', "go"); put('サ', "sa"); put('ザ', "za"); put('シ', "shi"); put('ジ', "ji"); put('ス', "su"); put('ズ', "zu"); put('セ', "se"); put('ゼ', "ze"); put('ソ', "so"); put('ゾ', "zo"); put('タ', "ta"); put('ダ', "da"); put('チ', "chi"); put('ヂ', "dzi"); put('ツ', "tsu"); put('ヅ', "dzu"); put('テ', "te"); put('デ', "de"); put('ト', "to"); put('ド', "do"); put('ナ', "na"); put('ニ', "ni"); put('ヌ', "nu"); put('ネ', "ne"); put('ノ', "no"); put('ハ', "ha"); put('バ', "ba"); put('パ', "pa"); put('ヒ', "hi"); put('ビ', "bi"); put('ピ', "pi"); put('フ', "fu"); put('ブ', "bu"); put('プ', "pu"); put('ヘ', "he"); put('ベ', "be"); put('ペ', "pe"); put('ホ', "ho"); put('ボ', "bo"); put('ポ', "po"); put('マ', "ma"); put('ミ', "mi"); put('ム', "mu"); put('メ', "me"); put('モ', "mo"); put('ヤ', "ya"); put('ユ', "yu"); put('ヨ', "yo"); put('ラ', "ra"); put('リ', "ri"); put('ル', "ru"); put('レ', "re"); put('ロ', "ro"); put('ワ', "wa"); put('ヲ', "wo"); put('ン', "n"); }}; public static final Map<Character, Character> KATAKANA_TO_HIRAGANA = new HashMap<Character, Character>() {{ put('ア', 'あ'); put('イ', 'い'); put('ウ', 'う'); put('エ', 'え'); put('オ', 'お'); put('カ', 'か'); put('ガ', 'が'); put('キ', 'き'); put('ギ', 'ぎ'); put('ク', 'く'); put('グ', 'ぐ'); put('ケ', 'け'); put('ゲ', 'げ'); put('コ', 'こ'); put('ゴ', 'ご'); put('サ', 'さ'); put('ザ', 'ざ'); put('シ', 'し'); put('ジ', 'じ'); put('ス', 'す'); put('ズ', 'ず'); put('セ', 'せ'); put('ゼ', 'ぜ'); put('ソ', 'そ'); put('ゾ', 'ぞ'); put('タ', 'た'); put('ダ', 'だ'); put('チ', 'ち'); put('ヂ', 'ぢ'); put('ツ', 'つ'); put('ヅ', 'づ'); put('テ', 'て'); put('デ', 'で'); put('ト', 'と'); put('ド', 'ど'); put('ナ', 'な'); put('ニ', 'に'); put('ヌ', 'ぬ'); put('ネ', 'ね'); put('ノ', 'の'); put('ハ', 'は'); put('バ', 'ば'); put('パ', 'ぱ'); put('ヒ', 'ひ'); put('ビ', 'び'); put('ピ', 'ぴ'); put('フ', 'ふ'); put('ブ', 'ぶ'); put('プ', 'ぷ'); put('ヘ', 'へ'); put('ベ', 'べ'); put('ペ', 'ぺ'); put('ホ', 'ほ'); put('ボ', 'ぼ'); put('ポ', 'ぽ'); put('マ', 'ま'); put('ミ', 'み'); put('ム', 'む'); put('メ', 'め'); put('モ', 'も'); put('ヤ', 'や'); put('ユ', 'ゆ'); put('ヨ', 'よ'); put('ラ', 'ら'); put('リ', 'り'); put('ル', 'る'); put('レ', 'れ'); put('ロ', 'ろ'); put('ワ', 'わ'); put('ヲ', 'を'); put('ン', 'ん'); }}; public static final Map<Character, String> HIRAGANA_TO_ROMAJI = new HashMap<Character, String>() {{ put('あ', "a"); put('い', "i"); put('う', "u"); put('え', "e"); put('お', "o"); put('か', "ka"); put('が', "ga"); put('き', "ki"); put('ぎ', "gi"); put('く', "ku"); put('ぐ', "gu"); put('け', "ke"); put('げ', "ge"); put('こ', "ko"); put('ご', "go"); put('さ', "sa"); put('ざ', "za"); put('し', "shi"); put('じ', "ji"); put('す', "su"); put('ず', "zu"); put('せ', "se"); put('ぜ', "ze"); put('そ', "so"); put('ぞ', "zo"); put('た', "ta"); put('だ', "da"); put('ち', "chi"); put('ぢ', "dzi"); put('つ', "tsu"); put('づ', "dzu"); put('て', "te"); put('で', "de"); put('と', "to"); put('ど', "do"); put('な', "na"); put('に', "ni"); put('ぬ', "nu"); put('ね', "ne"); put('の', "no"); put('は', "ha"); put('ば', "ba"); put('ぱ', "pa"); put('ひ', "hi"); put('び', "bi"); put('ぴ', "pi"); put('ふ', "fu"); put('ぶ', "bu"); put('ぷ', "pu"); put('へ', "he"); put('べ', "be"); put('ぺ', "pe"); put('ほ', "ho"); put('ぼ', "bo"); put('ぽ', "po"); put('ま', "ma"); put('み', "mi"); put('む', "mu"); put('め', "me"); put('も', "mo"); put('や', "ya"); put('ゆ', "yu"); put('よ', "yo"); put('ら', "ra"); put('り', "ri"); put('る', "ru"); put('れ', "re"); put('ろ', "ro"); put('わ', "wa"); put('を', "wo"); put('ん', "n"); }}; public static String toHiragana(String katakana) { StringBuilder result = new StringBuilder(); for (char p : katakana.toCharArray()) { if (HIRAGANA_TO_ROMAJI.containsKey(p)) { result.append(p); } else if (KATAKANA_TO_ROMAJI.containsKey(p)) { result.append(KATAKANA_TO_HIRAGANA.get(p)); } else { //throw new IllegalArgumentException("Illegal kana: " + katakana); } } return result.toString(); } }