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