问题
根据the documentation,字符串'123'是数字。
由于我认为这可能是文档中的错误,我运行测试来验证语句。我发现根据Apache Commons它是数字的。
为什么这个字符串数字?这些人物代表什么?
#1 热门回答(193 赞)
因为"CharSequence只包含Unicode数字"(引用你的linked documentation)。
所有字符都返回trueCharacter.isDigit
:
一些包含数字的Unicode字符范围:'\ u0030'到'\ u0039',ISO-LATIN-1数字('0'到'9')'\ u0660'到'\ u0669',阿拉伯语 - 印度数字'\ u06F0'到'\ u06F9',扩展阿拉伯语 - 印度数字'\ u0966'到'\ u096F',梵文数字'\ uFF10'到'\ uFF19',全宽数字许多其他字符范围也包含数字。
१२३
梵文数字:
- 1是DEVANAGARI DIGIT ONE,\ u0967
- 2是DEVANAGARI DIGIT TWO,\ u0968
- 3是DEVANAGARI DIGIT THREE,\ u0969
#2 热门回答(58 赞)
符号123与尼泊尔语或使用印地语,古吉拉特语等Devanagari script的任何其他语言的123相同,因此是Apache Commons的编号。
#3 热门回答(27 赞)
你可以使用23374469来检查角色的一般类别:
System.out.println(Character.DECIMAL_DIGIT_NUMBER == Character.getType('१'));
这将打印true
,这是'1'是adigit号的"证据"。
现在让我们检查'1'字符的unicode值:
System.out.println(Integer.toHexString('१'));
// 967
该数字的范围是Devanagari digits-,即:\u0966
到\u096F
。
还试试:
Character.UnicodeBlock block = Character.UnicodeBlock.of('१');
System.out.println(block.toString());
// DEVANAGARI
Devanagariis:
是印度和尼泊尔的abugida(alphasyllabary)字母表
"123"是"123"(基本拉丁语unicode)。
读:
- 关于'1'字符的更多细节
- StringUtils#isNumeric实现