为什么'123'是数字?
根据文档字符串'123'是数字。
由于我相信这可能是文档中的错误,我运行测试来验证声明。 我发现根据Apache Commons,它是数字。
为什么是这个字符串数字? 这些字符代表什么?
因为“CharSequence只包含Unicode数字”(引用链接的文档)。
Character.isDigit
所有字符都返回true:
一些包含数字的Unicode字符范围:
许多其他字符范围也包含数字。
१२३
是梵文数字:
१
是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
这个数字在梵文数字的范围内 - 即: u0966
到u096F
。
另请尝试:
Character.UnicodeBlock block = Character.UnicodeBlock.of('१');
System.out.println(block.toString());
// DEVANAGARI
梵文是:
是印度和尼泊尔的abugida(alphasyllabary)字母表
“123”是一个“123”(基本拉丁语unicode)。
读:
StringUtils#isNumeric
实现