66

有人可以向我解释这里发生了什么:

char c = '+';
int i = (int)c;
System.out.println("i: " + i + " ch: " + Character.getNumericValue(c));

这打印i: 43 ch:-1。这是否意味着我必须依靠原始转换来char转换int?那么如何将 a 转换CharacterInteger

编辑:是的,如果它不是数值,我知道Character.getNumericValue返回,这对我来说很有意义。-1问题是:为什么进行原始转换会返回43

Edit2: 43是 ASCII 的+,但我希望演员不会成功,就像getNumericValue没有成功一样。否则这意味着有两种语义等效的方式来执行相同的操作但结果不同?

4

6 回答 6

93
Character.getNumericValue(c)

java.lang.Character.getNumericValue(char ch)返回int指定的 Unicode 字符表示的值。例如,字符'\u216C'(罗马数字 50)将返回一个值为 50 的 int。

大写('\u0041' through '\u005A')、小写('\u0061' through '\u007A')和全角变体('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A')形式的字母 AZ 具有从 10 到 35 的数值。这与 Unicode 规范无关,Unicode 规范不为这些 char 值分配数值。

此方法返回字符的数值,作为非负 int 值;

-2 如果字符的数值不是非负整数;

-1 如果字符没有数值。

这是链接

于 2013-10-15T18:08:18.187 回答
40

正如文档明确指出的那样,Character.getNumericValue()将字符的值作为数字返回。如果字符不是数字,则
返回。-1

如果您想获取装箱Character对象的数字 Unicode 代码点,您需要先将其拆箱:

int value = (int)c.charValue();
于 2013-10-15T18:07:11.047 回答
36

尝试以下任何一种。这些应该工作:

int a = Character.getNumericValue('3');
int a = Integer.parseInt(String.valueOf('3');
于 2015-08-26T09:09:02.703 回答
2

来自 Javadoc 的Character#getNumericValue

如果字符没有数值,则返回 -1。如果字符具有不能表示为非负整数的数值(例如,小数值),则返回 -2。

该字符+没有数值,因此您得到-1。

更新:

原始转换给您 43 的原因是字符“+”被编码为整数 43。

于 2013-10-15T18:08:10.673 回答
1

43 是“+”符号的 dec ascii 数字。这就解释了为什么你会得到 43 的回报。 http://en.wikipedia.org/wiki/ASCII

于 2013-10-15T18:13:58.450 回答
0
public class IntergerParser {

public static void main(String[] args){
String number = "+123123";
System.out.println(parseInt(number));
}

private static int parseInt(String number){
    char[] numChar = number.toCharArray();
    int intValue = 0;
    int decimal = 1;
    for(int index = numChar.length ; index > 0 ; index --){
        if(index == 1 ){
            if(numChar[index - 1] == '-'){
                return intValue * -1;
            } else if(numChar[index - 1] == '+'){
                return intValue;
            }
        }
        intValue = intValue + (((int)numChar[index-1] - 48) * (decimal));
        System.out.println((int)numChar[index-1] - 48+ " " + (decimal));
        decimal = decimal * 10;
    }
    return intValue;
}
于 2016-05-01T18:03:17.483 回答