Char to int又回来了

时间:2016-05-30 21:27:43

标签: java char

我想找到一个字符的整数表示,然后找到一个int的字符表示。

我目前的解决方案是这样,但它不起作用:

String s = "A"
Integer b = Character.getNumericValue(s.toCharArray()[0]);    // 10
char c = Character.toChars(b)[0];                             // (blank)

我该怎么做?

2 个答案:

答案 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)也可以使用。