为什么'123'是数字的?

Han*_*nes 100 java unicode number-systems apache-commons-lang3

根据文档,字符串'123'是数字.

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

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

And*_*ner 197

因为"CharSequence仅包含Unicode数字"(引用您的链接文档).

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

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

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

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

??? 是梵文数字:

  • @CedricReichenbach:关键区别在于,虽然亿是*数字*(通过具有Numeric_Type的非None值之一的标准,在这种情况下Numeric_Type = Numeric),它不是任何类型的*digit*.(即使它是,你也不会把它带到3的幂;你会把*基数*提高到各种权力,而不是*数字*.)`parseInt`需要数字,也许是令人困惑的,`isNumeric`此问题中的方法测试十进制数字字符(General_Category = Decimal_Number)而不是任何更广泛的数字字符类别. (13认同)
  • @Joker_vD好吧,你没有指定哪个重载,所以是的,确定:[`Integer.parseInt("222",2)`](http://ideone.com/xDtkYY). (11认同)
  • 完整的Devangari数字是'012345678 9`. (10认同)
  • @Joker_vD它甚至都不难; 有许多不受支持的语言.即使如此,还有Chinise"亿",代表10 ^ 8 - >这对3的幂会导致溢出.*[数字系统列表](https://en.wikipedia.org/wiki/Numerical_digit#Numerals_in_most_popular_systems)* (4认同)
  • @ v7d8dpo4(s)他问是否有办法让`Integer.parseInt()`为3个字符的数字输入字符串抛出异常. (2认同)

ΦXo*_*a ツ 59

对于尼泊尔语或使用梵文剧本的任何其他语言(如印地语,古吉拉特语等),符号123与123相同,因此是Apache Commons的编号.

  • 阿拉伯人从印第安人那里得到了数字. (41认同)
  • @rahul阿拉伯数字是1-9,而不是通常认为的1-9. (5认同)
  • 这个东西在阿拉伯数字中几乎看起来像"123". (3认同)

Mar*_*oun 26

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

System.out.println(Character.DECIMAL_DIGIT_NUMBER == Character.getType('?'));
Run Code Online (Sandbox Code Playgroud)

这将打印true,这是"1"是数字编号的"证据" .

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

System.out.println(Integer.toHexString('?'));
// 967
Run Code Online (Sandbox Code Playgroud)

这个数字在梵文数字的范围内- 这是:\u0966通过\u096F.

还试试:

Character.UnicodeBlock block = Character.UnicodeBlock.of('?');
System.out.println(block.toString());
// DEVANAGARI
Run Code Online (Sandbox Code Playgroud)

梵文是:

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

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

读:


Sol*_*zky 23

如果您想知道特定"角色"具有哪些属性(并且有相当多的属性),请直接转到源:Unicode.org.他们拥有研究工具,可以向您展示您最想知道的任何事情.

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

  • @TRiG感谢您提及.有趣的实用程序.它确实涵盖了前3个链接(原始集)中显示的一些功能,但我刚刚更新了我的答案,其中包含一些额外的链接,这些链接显示了可以在Unicode.org上完成的更高级查询,我认为不可能通过`uniprops`.此外,似乎`uniprops`是今年6月Unicode发布版本9.0后面的一个版本. (2认同)

Nay*_*ani 19

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

1表示1

2代表2

而且很明智

  • 更正:_Symbols'123'实际上来自_**梵文**_language_(即其他海报注意到的梵文剧本) (4认同)