问题

根据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实现

原文链接