我想找到一个字符的整数表示,然后找到一个int的字符表示。
我目前的解决方案是这样,但它不起作用:
String s = "A"
Integer b = Character.getNumericValue(s.toCharArray()[0]); // 10
char c = Character.toChars(b)[0]; // (blank)
我该怎么做?
答案 0 :(得分:0)
int b = s.charAt(0); // 65
char c = (char) b // 'A'
答案 1 :(得分:0)
对Character.getNumericValue(char)
的工作方式存在误解。
返回指定的Unicode字符表示的int值。例如,角色' \ u216C' (罗马数字五十)将返回一个值为50的int。
字母AZ以大写字母(' \ u0041'至' \ u005A'),小写字母(' \ u0061'至' \ u007A&# 39;)和全宽变体(' \ uFF21'通过' \ uFF3A' \ uFF41'通过' \ uFF5A')表格具有从10到35的数值。这与Unicode规范无关,Unicode规范不会为这些char值分配数值。
来自java docs。
换句话说:
方法getNumericValue
使不生成指定字符的UTF-16值,但尝试生成数值 - 在某种意义上,' 0'将从给定值产生0。并且' A'对应于十六进制中的10。
但是10 不对应于' A'的UTF16值。
将char
转换为相应的UTF16值的正确方法是使用Character
中的一个代码点方法。或者,如果您绝对肯定,所有值都将是BMP,您可以使用
char c = 'A';
int i = (int) c;
在这种情况下,Character.toChars(int)
也可以使用。