//# -*- 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();
}
}
}