1 package com.lavans.luz2.commons;
\r
3 import java.io.UnsupportedEncodingException;
\r
5 public class JapaneseTextUtil {
\r
7 * strのエンコードを「Windows-31J」に変換し、そのバイト数を返す
\r
12 public static int getByteLength(String str) {
\r
19 byte[] buff = str.getBytes("Windows-31J");
\r
21 } catch (UnsupportedEncodingException e) {}
\r
30 private static final String HANKANA = "アイウエオァィゥェォカキクケコサシスセソタチツッテトナニヌネノハヒフヘホマミムメモヤユヨャュョラリルレロワヲンー゙゚";
\r
31 private static final String KATAKANA = "アイウエオァィゥェォカキクケコサシスセソタチツッテトナニヌネノハヒフヘホマミムメモヤユヨャュョラリルレロワヲンー゛゜";
\r
32 private static final String KATAKANA_D = "ヴガギグゲゴザジズゼゾダヂヅデドバビブベボ";
\r
33 private static final String HANKANA_D = "ウカキクケコサシスセソタチツテトハヒフヘホ";
\r
34 private static final String KATAKANA_H = "パピプペポ";
\r
35 private static final String HANKANA_H = "ハヒフヘホ";
\r
38 private static final String HANKANA_KUTOUEN = "、。";
\r
39 private static final String KATAKANA_KUTOUTEN = "、。";
\r
41 // static final java.lang.String ひらがな =
\r
42 // "あいうえおぁぃぅぇぉかきくけこさしすせそたちつってとなにぬねのはひふへほまみむめもやゆよゃゅょらりるれろわをんー゛゜、。がぎぐげござじずぜぞだぢづでどヴばびぶべぼぱぴぷぺぽ"
\r
46 * 全角カタカナを半角カタカナに変換する日本語正規化。
\r
48 public static String toHankana(String kanaStr) {
\r
49 if(kanaStr==null) return null;
\r
50 StringBuffer hankanaStr = new StringBuffer(kanaStr.length());
\r
52 for (int i = 0; i < kanaStr.length(); i++) {
\r
53 char kana = kanaStr.charAt(i);
\r
54 if ((index = KATAKANA.indexOf(kana)) >= 0) {
\r
55 hankanaStr.append(HANKANA.charAt(index));
\r
56 } else if ((index = KATAKANA_D.indexOf(kana)) >= 0) {
\r
57 hankanaStr.append(HANKANA_D.charAt(index) + "゙");
\r
58 } else if ((index = KATAKANA_H.indexOf(kana)) >= 0) {
\r
59 hankanaStr.append(HANKANA_H.charAt(index) + "゚");
\r
61 hankanaStr.append(kana);
\r
65 return hankanaStr.toString();
\r
69 * 全角カタカナを半角カタカナに変換。句読点あり。
\r
71 public static String toHankanaKutouten(String kanaStr) {
\r
72 StringBuffer hankanaStr = new StringBuffer(kanaStr.length());
\r
74 for (int i = 0; i < kanaStr.length(); i++) {
\r
75 char kana = kanaStr.charAt(i);
\r
76 if ((index = KATAKANA.indexOf(kana)) >= 0) {
\r
77 hankanaStr.append(HANKANA.charAt(index));
\r
78 } else if ((index = KATAKANA_D.indexOf(kana)) >= 0) {
\r
79 hankanaStr.append(HANKANA_D.charAt(index) + "゙");
\r
80 } else if ((index = KATAKANA_H.indexOf(kana)) >= 0) {
\r
81 hankanaStr.append(HANKANA_H.charAt(index) + "゚");
\r
82 } else if ((index = KATAKANA_KUTOUTEN.indexOf(kana)) >= 0) {
\r
83 hankanaStr.append(HANKANA_KUTOUEN.charAt(index));
\r
85 hankanaStr.append(kana);
\r
89 return hankanaStr.toString();
\r
93 * 半角カタカナを全角カタカナに変換する日本語正規化 1文字単位。
\r
95 public static char toKanaFull(char kana) {
\r
98 if ((index = HANKANA.indexOf(kana)) >= 0) {
\r
99 kana = KATAKANA.charAt(index);
\r
106 * 半角カタカナを全角カタカナにし、濁点も統合する。 日本語正規化 使用例 郵便番号辞書 JPRS RACEドメイン
\r
108 public static String toKanaFull(java.lang.String str) {
\r
111 str2 = new StringBuffer();
\r
112 for (int i = 0; i < str.length(); i++) {
\r
113 kkv = toKanaFull(str.charAt(i));
\r
115 kkv = str2.charAt(str2.length() - 1);
\r
117 str2.deleteCharAt(str2.length() - 1);
\r
118 } else if (kkv == '゚') {
\r
119 kkv = str2.charAt(str2.length() - 1);
\r
121 str2.deleteCharAt(str2.length() - 1);
\r
127 return str2.toString();
\r
131 * 日本語正規化 全角/半角カタカナをひらがなにする
\r
133 public static String toHiragana(String str) {
\r
135 str2 = new StringBuffer();
\r
137 str = toKanaFull(str);
\r
138 for (int i = 0; i < str.length(); i++) {
\r
139 ch = str.charAt(i);
\r
140 if (ch >= 0x30A0 && ch <= 0x30FA) {
\r
145 return str2.toString();
\r
151 public static String toKatakana(String str) {
\r
153 str2 = new StringBuffer();
\r
155 for (int i = 0; i < str.length(); i++) {
\r
156 ch = str.charAt(i);
\r
157 if (ch >= 0x3040 && ch <= 0x309A) {
\r
162 return str2.toString();
\r
165 private static final java.lang.String twoByte = "+-―‐*/=|!?”#@$%&’`()[],.;:_<>^{}・";
\r
166 private static final java.lang.String oneByte = "+---*/=|!?\"#@$%&'`()[],.;:_<>^{}・";
\r
169 * 英数字列を半角文字に正規化する。 未完全版。 郵便番号、電話番号、日本語ドメイン等
\r
171 public static java.lang.String toHalf(java.lang.String str) {
\r
173 str2 = new StringBuffer();
\r
176 for (int i = 0; i < str.length(); i++) {
\r
177 ch = str.charAt(i);
\r
178 if (ch >= 'a' && ch <= 'z') {
\r
180 } else if (ch >= 'A' && ch <= 'Z') {
\r
182 } else if (ch >= '0' && ch <= '9') {
\r
184 } else if (ch == ' ') {
\r
186 } else if ((idx = twoByte.indexOf(ch)) >= 0) {
\r
187 ch = oneByte.charAt(idx);
\r
188 } else if (ch == '¥') { // 判断は微妙
\r
193 return str2.toString();
\r
199 public static java.lang.String toFull(java.lang.String str) {
\r
201 if (str == null || str.length() == 0)
\r
205 str2 = new StringBuffer();
\r
208 for (int i = 0; i < str.length(); i++) {
\r
209 ch = str.charAt(i);
\r
210 if (ch >= 'a' && ch <= 'z') {
\r
212 } else if (ch >= 'A' && ch <= 'Z') {
\r
214 } else if (ch >= '0' && ch <= '9') {
\r
216 } else if (ch == ' ') {
\r
218 } else if ((idx = oneByte.indexOf(ch)) >= 0) {
\r
219 ch = twoByte.charAt(idx);
\r
220 } else if (ch == '\\') { // 判断は微妙
\r
225 return str2.toString();
\r
229 * 指定文字列を全角から半角に英数字・記号全てを変換します。
\r
234 public static String toHalfAll(String string) {
\r
236 if (string == null || string.length() == 0)
\r
239 return toHalf(toHankana(string));
\r
243 * 指定文字列を半角から全角に英数字・記号全てを変換します。
\r
248 public static String toFullAll(String string) {
\r
250 if (string == null || string.length() == 0)
\r
253 return toFull(toKanaFull(string));
\r
257 * This method converts Cp932 to JIS.
\r
259 public static String toJIS(String s) {
\r
260 StringBuffer sb = new StringBuffer();
\r
264 for (int i = 0; i < s.length(); i++) {
\r
267 case 0xff3c: // FULLWIDTH REVERSE SOLIDUS ->
\r
268 c = 0x005c; // REVERSE SOLIDUS
\r
270 case 0xff5e: // FULLWIDTH TILDE ->
\r
271 c = 0x301c; // WAVE DASH
\r
273 case 0x2225: // PARALLEL TO ->
\r
274 c = 0x2016; // DOUBLE VERTICAL LINE
\r
276 case 0xff0d: // FULLWIDTH HYPHEN-MINUS ->
\r
277 c = 0x2212; // MINUS SIGN
\r
279 case 0xffe0: // FULLWIDTH CENT SIGN ->
\r
280 c = 0x00a2; // CENT SIGN
\r
282 case 0xffe1: // FULLWIDTH POUND SIGN ->
\r
283 c = 0x00a3; // POUND SIGN
\r
285 case 0xffe2: // FULLWIDTH NOT SIGN ->
\r
286 c = 0x00ac; // NOT SIGN
\r
288 case 0x2015: // HORIZONTAL BAR
\r
289 c = 0x2014; // EM DASH
\r
297 return new String(sb);
\r
303 * This method convert JIS to Cp932.
\r
305 public static String toCp932(String s) {
\r
307 StringBuffer sb = new StringBuffer();
\r
309 for (int i = 0; i < s.length(); i++) {
\r
312 case 0x005c: // REVERSE SOLIDUS ->
\r
313 c = 0xff3c; // FULLWIDTH REVERSE SOLIDUS
\r
315 case 0x301c: // WAVE DASH ->
\r
316 c = 0xff5e; // FULLWIDTH TILDE
\r
318 case 0x2016: // DOUBLE VERTICAL LINE ->
\r
319 c = 0x2225; // PARALLEL TO
\r
321 case 0x2212: // MINUS SIGN ->
\r
322 c = 0xff0d; // FULLWIDTH HYPHEN-MINUS
\r
324 case 0x00a2: // CENT SIGN ->
\r
325 c = 0xffe0; // FULLWIDTH CENT SIGN
\r
327 case 0x00a3: // POUND SIGN ->
\r
328 c = 0xffe1; // FULLWIDTH POUND SIGN
\r
330 case 0x00ac: // NOT SIGN ->
\r
331 c = 0xffe2; // FULLWIDTH NOT SIGN
\r
333 case 0x2014 : // EM DASH
\r
334 c = 0x2015; // HORIZONTAL BAR
\r
338 return new String(sb);
\r