为什么' 123'数字?

时间:2016-10-20 07:59:33

标签: java unicode apache-commons-lang3

根据the documentation字符串' 123'是数字。

由于我认为这可能是文档中的错误,我运行测试来验证该语句。我发现根据Apache Commons它是数字。

为什么这个字符串数字?这些字符代表什么?

5 个答案:

答案 0 :(得分:195)

因为" CharSequence只包含Unicode数字" (引用你的linked documentation)。

Character.isDigit的所有字符都返回true:

  

包含数字的一些Unicode字符范围:

     
      
  • ' \ u0030'通过' \ u0039',ISO-LATIN-1数字(' 0'到' 9')
  •   
  • ' \ u0660'通过' \ u0669',阿拉伯语 - 印度数字
  •   
  • ' \ u06F0'通过' \ u06F9',扩展阿拉伯语 - 印度数字
  •   
  • ' \ u0966'通过' \ u096F',梵文数字
  •   
  • ' \ uFF10'通过' \ uFF19',全空数字
  •   
     

许多其他字符范围也包含数字。

१२३是梵文数字:

答案 1 :(得分:59)

123 符号与尼泊尔语或使用Devanagari script的任何其他语言(例如印地语,古吉拉特语等)的123相同,因此是一个数字Apache Commons。

答案 2 :(得分:27)

您可以使用Character#getType检查角色的常规类别:

System.out.println(Character.DECIMAL_DIGIT_NUMBER == Character.getType('१'));

这将打印true,这是一个"证据"那' 1'是位数

现在让我们检查一下' 1'的unicode值。字符:

System.out.println(Integer.toHexString('१'));
// 967

此号码位于Devanagari digits范围内,即:\u0966\u096F

还可以尝试:

Character.UnicodeBlock block = Character.UnicodeBlock.of('१');
System.out.println(block.toString());
// DEVANAGARI

Devanagari是:

  

是印度和尼泊尔的abugida(alphasyllabary)字母

" 123"是" 123" (基本拉丁语unicode)。

读:

答案 3 :(得分:24)

如果您想知道特定"字符"有(并且有很多),直接去源: Unicode.org 。他们拥有研究工具,可以向您展示您最想知道的任何事情。

保持谨慎: Unicode Consortium生成规范,而不是软件。这意味着每个软件供应商都可以尽可能准确地实现规范 。因此,就像HTML,JavaScript,CSS,SQL等一样,不同平台,语言等之间存在差异。例如,我在Microsoft的.NET Framework中发现了一个错误,其中带圆圈的拉丁字母A-Za-z - 代码点0x24B6到0x24E9 - 未正确注册为{{1} }(bug report here)。这会导致相关功能出现意外行为,例如调用char.IsLetter = true方法(bug report here)时。

答案 4 :(得分:20)

符号'123'实际上源自印地语(基本上来自梵语,即梵语),它代表数值如下:

1代表1

2代表2

和明智的一样