luk*_*sch 1 java unicode integer string-parsing
我的印象是java支持unicode字符.我做了这个测试,遗憾地发现它失败了.问题是为什么?这是一个错误还是有记录的地方?
// MATHEMATICAL SANS-SERIF ""
String unicodeNum6 = "\uD835\uDFE8";
int codePoint6 = unicodeNum6.codePointAt(0);
int val6 = Character.getNumericValue(codePoint6);
System.out.println("unicodeNum6 = "+ unicodeNum6
+ ", codePoint6 = "+ codePoint6+ ", val6 = "+val6);
int unicodeNum6Int = Integer.parseInt(unicodeNum6);
Run Code Online (Sandbox Code Playgroud)
这失败了 Exception in thread "main" java.lang.NumberFormatException: For input string: ""
意思是我认为,因为println工作并打印预期的行:
unicodeNum6 = , codePoint6 = 120808, val6 = 6
Run Code Online (Sandbox Code Playgroud)
所以Java完全知道unicode字符的数值但不在parseInt中使用它.
有人能说明为什么会失败吗?
这不是错误,行为记录在案.根据parseInt的文档(String s,int radix)(强调我的)
字符串中的字符必须都是指定基数的数字(由Character.digit(char,int)返回非负值确定),除了第一个字符可能是ASCII减号' - '('\ u002D ')表示负值或ASCII加号'+'('\ u002B')表示正值
如果你试试 :
int aa = Character.digit('\uD835', 10);
int bb = Character.digit('\uDFE8', 10);
Run Code Online (Sandbox Code Playgroud)
你会看到两者都返回-1.
记住你,Integer.parseInt(unicodeNum6);只会打电话Integer.parseInt(unicodeNum6, 10);