//# -*- encoding: utf-8 -*- package com.brightgenerous.commons; class StringConvertFullToHalfUtils { private StringConvertFullToHalfUtils() { } private static char convertToHalfNumber(char ch) { char ret; if ((ch >= '0') && (ch <= '9')) { ret = (char) ((ch - '0') + '0'); } else { ret = ch; } return ret; } public static String convertToHalfNumber(String str) { String ret; if ((str == null) || str.isEmpty()) { ret = str; } else if (str.length() == 1) { ret = String.valueOf(convertToHalfNumber(str.charAt(0))); } else { StringBuilder sb = new StringBuilder(str); for (int i = 0; i < str.length(); ++i) { char originalChar = sb.charAt(i); char convedChar = convertToHalfNumber(originalChar); if (originalChar != convedChar) { sb.setCharAt(i, convedChar); } } ret = sb.toString(); } return ret; } private static char convertToHalfAlphabet(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 convertToHalfAlphabet(String str) { String ret; if ((str == null) || str.isEmpty()) { ret = str; } else if (str.length() == 1) { ret = String.valueOf(convertToHalfAlphabet(str.charAt(0))); } else { StringBuilder sb = new StringBuilder(str); for (int i = 0; i < str.length(); ++i) { char originalChar = sb.charAt(i); char convedChar = convertToHalfAlphabet(originalChar); if (originalChar != convedChar) { sb.setCharAt(i, convedChar); } } ret = sb.toString(); } return ret; } // @see StringConvertHalfToFullUtils.convertToFullKatakana private static String convertToHalfKatakana(char ch) { String 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; 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 = String.valueOf(ch); } return ret; } public static String convertToHalfKatakana(String str) { String ret; if ((str == null) || str.isEmpty()) { ret = str; } else if (str.length() == 1) { ret = convertToHalfKatakana(str.charAt(0)); } else { StringBuilder sb = new StringBuilder(str.length()); for (int i = 0; i < str.length(); ++i) { sb.append(convertToHalfKatakana(str.charAt(i))); } ret = sb.toString(); } return ret; } // @see StringConvertHalfToFullUtils.convertToFullSymbol private static char convertToHalfSymbol(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 0x00a5: ret = 0x005c; break; // 「\」 165 → 92 case 0xffe0: ret = 0x00a2; break; // 「¢」65504 → 162 case 0xffe1: ret = 0x00a3; break; // 「£」65505 → 163 case 0xffe2: ret = 0x00ac; break; // 「¬」65506 → 172 case 0xffe3: ret = 0x00af; break; // 「 ̄」65507 → 175 // おまけ case '‐': ret = '-'; break; default: ret = ch; } return ret; } public static String convertToHalfSymbol(String str) { String ret; if ((str == null) || str.isEmpty()) { ret = str; } else if (str.length() == 1) { ret = String.valueOf(convertToHalfSymbol(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 = convertToHalfSymbol(originalChar); if (originalChar != convedChar) { sb.setCharAt(i, convedChar); } } ret = sb.toString(); } return ret; } private static String convertToHalfCharacter(char ch) { { { char c = convertToHalfNumber(ch); if (ch != c) { return String.valueOf(c); } } { char c = convertToHalfAlphabet(ch); if (ch != c) { return String.valueOf(c); } } { char c = convertToHalfSymbol(ch); if (ch != c) { return String.valueOf(c); } } } { String str = convertToHalfKatakana(ch); if ((1 < str.length()) || (str.charAt(0) != ch)) { return str; } } return String.valueOf(ch); } public static String convertToHalfCharacter(String str) { String ret; if ((str == null) || str.isEmpty()) { ret = str; } else if (str.length() == 1) { ret = convertToHalfCharacter(str.charAt(0)); } else { StringBuilder sb = new StringBuilder(str.length()); for (int i = 0; i < str.length(); ++i) { sb.append(convertToHalfCharacter(str.charAt(i))); } ret = sb.toString(); } return ret; } }