为什么'123'是数字?

根据文档字符串'123'是数字。

由于我相信这可能是文档中的错误,我运行测试来验证声明。 我发现根据Apache Commons,它是数字。

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


因为“CharSequence只包含Unicode数字”(引用链接的文档)。

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

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

  • ' u0030'到' u0039',ISO-LATIN-1数字('0'到'9')
  • ' u0660'到' u0669',阿拉伯 - 印度数字
  • ' u06F0'到' u06F9',扩展阿拉伯 - 印度数字
  • ' u0966'到' u096F',梵文数字
  • ' uFF10'到' uFF19',全角数字
  • 许多其他字符范围也包含数字。

    १२३是梵文数字:

  • 是DEVANAGARI DIGIT ONE, u0967
  • 是DEVANAGARI DIGIT TWO, u0968
  • 是DEVANAGARI DIGIT THREE, u0969

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


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

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

    这将打印为true ,这是“1”是一个数字的“证据”。

    现在让我们来看看'1'字符的unicode值:

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

    这个数字在梵文数字的范围内 - 即: u0966u096F

    另请尝试:

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

    梵文是:

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

    “123”是一个“123”(基本拉丁语unicode)。

    读:

  • 有关'1'字符的更多详细信息
  • StringUtils#isNumeric实现
  • 链接地址: http://www.djcxy.com/p/86977.html

    上一篇: Why is '१२३' numeric?

    下一篇: What does this regex mean?