Javaで整数に変換できる文字は0〜9だけではない。
“١٢٣٤٥٦٧٨٩٠”をparseIntすると1234567890になる。
public class NumeralChar {
public static void main(String[] args){
String chars = "١٢٣٤٥٦٧٨٩٠";
System.out.println( chars + " : " + Integer.parseInt(chars));
// 1234567890
}
}
これらはアラビアで使われている数字である。(インドに由来するのでインド数字と呼ばれているが使われているのはアラビア)
私が文字の”1″を整数の1として扱いたいときがあるように、アラビア方面では”١”を整数の1として扱いたいのだろう。
全角文字”1234567890”も1234567890になる。
public class NumeralChar {
public static void main(String[] args){
String chars = "1234567890";
System.out.println( chars + " : " + Integer.parseInt(chars));
// 1234567890
}
}
べつに”1”を整数の1にしたくはないけれど。
Javaの文字列はUnicodeだ。
Unicodeはもともと世界で使われるすべての文字を共通の文字セットで扱えるように作られたものなので、数字を表す文字も複数ある。
こういった文字はorg.apache.commons.lang.math.NumberUtilsのisNumber()やisDigit()でも数字として判定できる。
“١”はJavaの領域においては数字に変換できるが、他ではそうでないことが多い。
isNumber()で判定してtrueだった値をMySQLのintとして定義された列に挿入すると、MySQLは”Incorrect integer value”のエラーを応答する。
※MySQLのcharsetをアラビア語にしたらいけるかもしれないが、試していない。
数字を表すUnicode (一部)
code | 文字 | 対応する数 |
---|---|---|
\u0030 | 0 | 0 |
\u0031 | 1 | 1 |
\u0032 | 2 | 2 |
\u0033 | 3 | 3 |
\u0034 | 4 | 4 |
\u0035 | 5 | 5 |
\u0036 | 6 | 6 |
\u0037 | 7 | 7 |
\u0038 | 8 | 8 |
\u0039 | 9 | 9 |
\u0660 | ٠ | 0 |
\u0661 | ١ | 1 |
\u0662 | ٢ | 2 |
\u0663 | ٣ | 3 |
\u0664 | ٤ | 4 |
\u0665 | ٥ | 5 |
\u0666 | ٦ | 6 |
\u0667 | ٧ | 7 |
\u0668 | ٨ | 8 |
\u0669 | ٩ | 9 |
\u06F0 | ۰ | 0 |
\u06F1 | ۱ | 1 |
\u06F2 | ۲ | 2 |
\u06F3 | ۳ | 3 |
\u06F4 | ۴ | 4 |
\u06F5 | ۵ | 5 |
\u06F6 | ۶ | 6 |
\u06F7 | ۷ | 7 |
\u06F8 | ۸ | 8 |
\u06F9 | ۹ | 9 |
\u0996 | খ | 0 |
\u0997 | গ | 1 |
\u0998 | ঘ | 2 |
\u0999 | ঙ | 3 |
\u099A | চ | 4 |
\u099B | ছ | 5 |
\u099C | জ | 6 |
\u099D | ঝ | 7 |
\u099E | ঞ | 8 |
\u099E | ঞ | 9 |
\uFF10 | 0 | 0 |
\uFF11 | 1 | 1 |
\uFF12 | 2 | 2 |
\uFF13 | 3 | 3 |
\uFF14 | 4 | 4 |
\uFF15 | 5 | 5 |
\uFF16 | 6 | 6 |
\uFF17 | 7 | 7 |
\uFF18 | 8 | 8 |
\uFF19 | 9 | 9 |