//# -*- encoding: utf-8 -*- package com.brightgenerous.commons; class StringConvertHalfToFullUtils { private StringConvertHalfToFullUtils() { } private static char convertToFullNumber(char ch) { char ret; if ((ch >= '0') && (ch <= '9')) { ret = (char) ((ch - '0') + '0'); } else { ret = ch; } return ret; } public static String convertToFullNumber(String str) { String ret; if ((str == null) || str.isEmpty()) { ret = str; } else if (str.length() == 1) { ret = String.valueOf(convertToFullNumber(str.charAt(0))); } else { StringBuilder sb = new StringBuilder(str); for (int i = 0; i < str.length(); ++i) { char originalChar = sb.charAt(i); char convedChar = convertToFullNumber(originalChar); if (originalChar != convedChar) { sb.setCharAt(i, convedChar); } } ret = sb.toString(); } return ret; } private static char convertToFullAlphabet(char ch) { char ret; if ((ch >= 'a') && (ch <= 'z')) { ret = (char) ((ch - 'a') + 'a'); } else if ((ch >= 'A') && (ch <= 'Z')) { ret = (char) ((ch - 'A') + 'A'); } else { ret = ch; } return ret; } public static String convertToFullAlphabet(String str) { String ret; if ((str == null) || str.isEmpty()) { ret = str; } else if (str.length() == 1) { ret = String.valueOf(convertToFullAlphabet(str.charAt(0))); } else { StringBuilder sb = new StringBuilder(str); for (int i = 0; i < str.length(); ++i) { char originalChar = sb.charAt(i); char convedChar = convertToFullAlphabet(originalChar); if (originalChar != convedChar) { sb.setCharAt(i, convedChar); } } ret = sb.toString(); } return ret; } // @see StringConvertFullToHalfUtils#convertToHalfKatakana private static char convertToFullKatakana(char ch) { char ret; switch (ch) { case 'ヲ': ret = 'ヲ'; break; case 'ァ': ret = 'ァ'; break; case 'ィ': ret = 'ィ'; break; case 'ゥ': ret = 'ゥ'; break; case 'ェ': ret = 'ェ'; break; case 'ォ': ret = 'ォ'; break; case 'ャ': ret = 'ャ'; break; case 'ュ': ret = 'ュ'; break; case 'ョ': ret = 'ョ'; break; case 'ッ': ret = 'ッ'; break; case 'ー': ret = 'ー'; break; case 'ア': ret = 'ア'; break; case 'イ': ret = 'イ'; break; case 'ウ': ret = 'ウ'; break; case 'エ': ret = 'エ'; break; case 'オ': ret = 'オ'; break; case 'カ': ret = 'カ'; break; case 'キ': ret = 'キ'; break; case 'ク': ret = 'ク'; break; case 'ケ': ret = 'ケ'; break; case 'コ': ret = 'コ'; break; case 'サ': ret = 'サ'; break; case 'シ': ret = 'シ'; break; case 'ス': ret = 'ス'; break; case 'セ': ret = 'セ'; break; case 'ソ': ret = 'ソ'; break; case 'タ': ret = 'タ'; break; case 'チ': ret = 'チ'; break; case 'ツ': ret = 'ツ'; break; case 'テ': ret = 'テ'; break; case 'ト': ret = 'ト'; break; case 'ナ': ret = 'ナ'; break; case 'ニ': ret = 'ニ'; break; case 'ヌ': ret = 'ヌ'; break; case 'ネ': ret = 'ネ'; break; case 'ノ': ret = 'ノ'; break; case 'ハ': ret = 'ハ'; break; case 'ヒ': ret = 'ヒ'; break; case 'フ': ret = 'フ'; break; case 'ヘ': ret = 'ヘ'; break; case 'ホ': ret = 'ホ'; break; case 'マ': ret = 'マ'; break; case 'ミ': ret = 'ミ'; break; case 'ム': ret = 'ム'; break; case 'メ': ret = 'メ'; break; case 'モ': ret = 'モ'; break; case 'ヤ': ret = 'ヤ'; break; case 'ユ': ret = 'ユ'; break; case 'ヨ': ret = 'ヨ'; break; case 'ラ': ret = 'ラ'; break; case 'リ': ret = 'リ'; break; case 'ル': ret = 'ル'; break; case 'レ': ret = 'レ'; break; case 'ロ': ret = 'ロ'; break; case 'ワ': ret = 'ワ'; break; case 'ン': ret = 'ン'; break; case '゙': ret = '゛'; break; case '゚': ret = '゜'; break; default: ret = ch; } return ret; } private static char mergeToFullKatakana(char ch1, char ch2) { if (ch2 == '゙') { if ("カキクケコサシスセソタチツテトハヒフヘホウ".indexOf(ch1) != -1) { switch (ch1) { case 'カ': return 'ガ'; case 'キ': return 'ギ'; case 'ク': return 'グ'; case 'ケ': return 'ゲ'; case 'コ': return 'ゴ'; case 'サ': return 'ザ'; case 'シ': return 'ジ'; case 'ス': return 'ズ'; case 'セ': return 'ゼ'; case 'ソ': return 'ゾ'; case 'タ': return 'ダ'; case 'チ': return 'ヂ'; case 'ツ': return 'ヅ'; case 'テ': return 'デ'; case 'ト': return 'ド'; case 'ハ': return 'バ'; case 'ヒ': return 'ビ'; case 'フ': return 'ブ'; case 'ヘ': return 'ベ'; case 'ホ': return 'ボ'; case 'ウ': return 'ヴ'; } } } else if (ch2 == '゚') { if ("ハヒフヘホ".indexOf(ch1) != -1) { switch (ch1) { case 'ハ': return 'パ'; case 'ヒ': return 'ピ'; case 'フ': return 'プ'; case 'ヘ': return 'ペ'; case 'ホ': return 'ポ'; } } } return ch1; } public static String convertToFullKatakana(String str) { if ((str == null) || str.isEmpty()) { return str; } else if (str.length() == 1) { return String.valueOf(convertToFullKatakana(str.charAt(0))); } else { StringBuilder sb = new StringBuilder(str); int i = 0; for (i = 0; i < (sb.length() - 1); ++i) { char originalChar1 = sb.charAt(i); char originalChar2 = sb.charAt(i + 1); char mergedChar = mergeToFullKatakana(originalChar1, originalChar2); if (mergedChar != originalChar1) { sb.setCharAt(i, mergedChar); sb.deleteCharAt(i + 1); } else { char convertedChar = convertToFullKatakana(originalChar1); if (convertedChar != originalChar1) { sb.setCharAt(i, convertedChar); } } } if (i < sb.length()) { char originalChar1 = sb.charAt(i); char convertedChar = convertToFullKatakana(originalChar1); if (convertedChar != originalChar1) { sb.setCharAt(i, convertedChar); } } return sb.toString(); } } private static final char FULL_BACK_SLASH; static { String osName = System.getProperties().getProperty("os.name"); if ((osName == null) || (osName.toLowerCase().indexOf("windows") == -1)) { FULL_BACK_SLASH = '\'; } else { FULL_BACK_SLASH = '¥'; } } // @see StringConvertFullToHalfUtils#convertToHalfSymbol private static char convertToFullSymbol(char ch) { char ret; switch (ch) { case ' ': ret = ' '; break; case '!': ret = '!'; break; case '"': ret = '”'; break; case '#': ret = '#'; break; case '$': ret = '$'; break; case '%': ret = '%'; break; case '&': ret = '&'; break; case '\'': ret = '’'; break; case '(': ret = '('; break; case ')': ret = ')'; break; case '*': ret = '*'; break; case '+': ret = '+'; break; case ',': ret = ','; break; case '-': ret = '-'; break; case '.': ret = '.'; break; case '/': ret = '/'; break; case ':': ret = ':'; break; case ';': ret = ';'; break; case '<': ret = '<'; break; case '=': ret = '='; break; case '>': ret = '>'; break; case '?': ret = '?'; break; case '@': ret = '@'; break; case '[': ret = '['; break; case '\\': ret = FULL_BACK_SLASH; break; case ']': ret = ']'; break; case '^': ret = '^'; break; case '_': ret = '_'; break; case '`': ret = '‘'; break; case '{': ret = '{'; break; case '|': ret = '|'; break; case '}': ret = '}'; break; case '~': ret = '~'; break; case '。': ret = '。'; break; case '「': ret = '「'; break; case '」': ret = '」'; break; case '、': ret = '、'; break; case '・': ret = '・'; break; default: ret = ch; } return ret; } public static String convertToFullSymbol(String str) { if ((str == null) || str.isEmpty()) { return str; } else if (str.length() == 1) { return String.valueOf(convertToFullSymbol(str.charAt(0))); } else { StringBuilder sb = new StringBuilder(str); int i = 0; for (i = 0; i < sb.length(); ++i) { char originalChar = sb.charAt(i); char convedChar = convertToFullSymbol(originalChar); sb.setCharAt(i, convedChar); } return sb.toString(); } } private static char mergeToFullCharacter(char ch1, char ch2) { { char c = ch1; c = mergeToFullKatakana(ch1, ch2); if (ch1 != c) { return c; } } return ch1; } private static char convertToFullCharacter(char ch) { { char c = convertToFullNumber(ch); if (ch != c) { return c; } } { char c = convertToFullAlphabet(ch); if (ch != c) { return c; } } { char c = convertToFullSymbol(ch); if (ch != c) { return c; } } { char c = convertToFullKatakana(ch); if (ch != c) { return c; } } return ch; } public static String convertToFullCharacter(String str) { if ((str == null) || str.isEmpty()) { return str; } else if (str.length() == 1) { return String.valueOf(convertToFullCharacter(str.charAt(0))); } else { StringBuilder sb = new StringBuilder(str); int i = 0; for (i = 0; i < (sb.length() - 1); ++i) { char originalChar1 = sb.charAt(i); char originalChar2 = sb.charAt(i + 1); char mergedChar = mergeToFullCharacter(originalChar1, originalChar2); if (mergedChar != originalChar1) { sb.setCharAt(i, mergedChar); sb.deleteCharAt(i + 1); } else { char convertedChar = convertToFullCharacter(originalChar1); if (convertedChar != originalChar1) { sb.setCharAt(i, convertedChar); } } } if (i < sb.length()) { char originalChar1 = sb.charAt(i); char convertedChar = convertToFullCharacter(originalChar1); if (convertedChar != originalChar1) { sb.setCharAt(i, convertedChar); } } return sb.toString(); } } }