在Java中将字符转换为整数

时间:2013-10-15 18:05:39

标签: java integer type-conversion character primitive

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

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

这会打印i: 43 ch:-1。这是否意味着我必须依靠原始转换才能将char转换为int?那么如何将Character转换为Integer

修改:是的,我知道Character.getNumericValue如果不是数字值则返回-1,这对我有意义。问题是:为什么做原始转换会返回43

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

6 个答案:

答案 0 :(得分:83)

Character.getNumericValue(c)

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

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

  

此方法返回字符的数值,如a   非负int值;

     

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

     如果字符没有数字值,则

-1。

here是链接。

答案 1 :(得分:40)

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

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

int value = (int)c.charValue();

答案 2 :(得分:33)

尝试下面的任何一个。这些应该有效:

int a = Character.getNumericValue('3');
int a = Integer.parseInt(String.valueOf('3');

答案 3 :(得分:2)

来自Character#getNumericValue的Javadoc:

  

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

字符+没有数字值,所以你得到-1。

更新

原始转换给你43的原因是字符'+'被编码为整数43。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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;
}