回答編集履歴
1
誤りの訂正
answer
CHANGED
|
@@ -164,4 +164,94 @@
|
|
|
164
164
|
$ java -version
|
|
165
165
|
java version "1.8.0_101"
|
|
166
166
|
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
|
|
167
|
-
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
|
|
167
|
+
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
|
|
168
|
+
|
|
169
|
+
###訂正(追記)
|
|
170
|
+
間違いがあるので訂正します。上のこの部分を削除してください。
|
|
171
|
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
172
|
+
半角領域は、\uff01 - \uff9f
|
|
173
|
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
174
|
+
|
|
175
|
+
半角文字の定義
|
|
176
|
+
1) 半角文字のうちにUnicodeに変換できない文字がある。
|
|
177
|
+
http://charset.7jp.net/jis.html
|
|
178
|
+
|
|
179
|
+
まず、Unicodeに変換できたものだけを半角判定の対象にするべきか、という議論があります。
|
|
180
|
+
ここでは「Unicodeに変換できたものだけを半角判定の対象にする」とします。
|
|
181
|
+
|
|
182
|
+
2) Unicodeに変換できた半角文字を次のように定義する
|
|
183
|
+
半角英数記号 \u0020-\u007e http://unicode.org/charts/PDF/U0000.pdf
|
|
184
|
+
半角カタカナ \uff61 - \uff9 http://unicode.org/charts/PDF/UFF00.pdf
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
```Java
|
|
188
|
+
public class HalfWidthCharacters {
|
|
189
|
+
|
|
190
|
+
public static final String FULL_WIDTH_NUMBERS;
|
|
191
|
+
public static final String FULL_WIDTH_ALPHABETS_UPPER;
|
|
192
|
+
public static final String FULL_WIDTH_ALPHABETS_LOWER;
|
|
193
|
+
public static final String FULL_WIDTH_SYMBOLS;
|
|
194
|
+
|
|
195
|
+
public static final String HALF_WIDTH_NUMBERS;
|
|
196
|
+
public static final String HALF_WIDTH_ALPHABETS_UPPER;
|
|
197
|
+
public static final String HALF_WIDTH_ALPHABETS_LOWER;
|
|
198
|
+
public static final String HALF_WIDTH_SYMBOLS;
|
|
199
|
+
public static final String HALF_WIDTH_KATAKANAS;
|
|
200
|
+
|
|
201
|
+
static {
|
|
202
|
+
FULL_WIDTH_NUMBERS = getCharacters(0xff10, 0xff19);
|
|
203
|
+
FULL_WIDTH_ALPHABETS_UPPER = getCharacters(0xff21, 0xff3a);
|
|
204
|
+
FULL_WIDTH_ALPHABETS_LOWER = getCharacters(0xff41, 0xff5a);
|
|
205
|
+
FULL_WIDTH_SYMBOLS = getCharacters(0xff00, 0xff0f) +
|
|
206
|
+
getCharacters(0xff1a, 0xff20) +
|
|
207
|
+
getCharacters(0xff3b, 0xff40) +
|
|
208
|
+
getCharacters(0xff5a, 0xff60);
|
|
209
|
+
|
|
210
|
+
HALF_WIDTH_NUMBERS = getCharacters(0x0030, 0x0039);
|
|
211
|
+
HALF_WIDTH_ALPHABETS_UPPER = getCharacters(0x0041, 0x005a);
|
|
212
|
+
HALF_WIDTH_ALPHABETS_LOWER = getCharacters(0x0061, 0x007a);
|
|
213
|
+
HALF_WIDTH_SYMBOLS = getCharacters(0x0020, 0x002f) +
|
|
214
|
+
getCharacters(0x003a, 0x0040) +
|
|
215
|
+
getCharacters(0x005b, 0x0060) +
|
|
216
|
+
getCharacters(0x007b, 0x007e);
|
|
217
|
+
HALF_WIDTH_KATAKANAS = getCharacters(0xff61, 0xff9f);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
static String getCharacters(int from, int to) {
|
|
221
|
+
char[] c = new char[to - from + 1];
|
|
222
|
+
for (int i=from; i<=to; ++i) {
|
|
223
|
+
c[i-from] = (char) i;
|
|
224
|
+
}
|
|
225
|
+
String s = new String(c);
|
|
226
|
+
return s;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
public static void main(String[] args) {
|
|
230
|
+
System.out.println("全角文字");
|
|
231
|
+
System.out.println(FULL_WIDTH_NUMBERS);
|
|
232
|
+
System.out.println(FULL_WIDTH_ALPHABETS_UPPER);
|
|
233
|
+
System.out.println(FULL_WIDTH_ALPHABETS_LOWER);
|
|
234
|
+
System.out.println(FULL_WIDTH_SYMBOLS);
|
|
235
|
+
System.out.println("半角文字");
|
|
236
|
+
System.out.println(HALF_WIDTH_NUMBERS);
|
|
237
|
+
System.out.println(HALF_WIDTH_ALPHABETS_UPPER);
|
|
238
|
+
System.out.println(HALF_WIDTH_ALPHABETS_LOWER);
|
|
239
|
+
System.out.println(HALF_WIDTH_SYMBOLS);
|
|
240
|
+
System.out.println(HALF_WIDTH_KATAKANAS);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
3) 半角文字判定用の正規表現
|
|
246
|
+
|
|
247
|
+
```Java
|
|
248
|
+
|
|
249
|
+
/** 正規表現 - 半角文字が含まれているか? */
|
|
250
|
+
static final String HAS_HALF_WIDTH_CHARACTERS = “.*[\\u0020-\\u007e\\uff61-\\uff9f]+.*";
|
|
251
|
+
|
|
252
|
+
/** 正規表現 - すべて半角文字か? */
|
|
253
|
+
static final String IS_HALF_WIDTH_CHARACTERS = "^[\\u0020-\\u007e\\uff61-\\uff9f]+$";
|
|
254
|
+
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Windos環境で、\は¥です。
|