2013-10-15 20 views
52

字符转换为整数,可有人请这到底是怎么回事向我解释:在Java中

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没有成功。否则,这意味着有两种语义等价的方法来执行相同的操作,但结果不同?

+1

那你希望得到,而不是'43'? –

+4

我不认为'getNumericValue'的确如你所想。这是一种将字符转换为整数的实用程序方法(如字符'5'到整数5中)。这与cast(将字符'5'转换为整数53)不同。 – Aurand

+0

关键是铸造不会返回数字的数字值。这两个操作做了两件不同的事情。 – SLaks

回答

38

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

如果你想获得一个盒装Character对象的数值Unicode代码点,你需要先拆箱它:

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

您可能想链接到该文档:http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#getNumericValue%28char%29 –

2

从Javadoc文档Character#getNumericValue

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

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

更新:

之所以原语转换是给你43是,该字符“+”被编码为整数43.

77
Character.getNumericValue(c) 

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

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

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

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

-1如果该字符没有数字值。

here是链接。

32

请尝试下面的任何一项。这应该工作:

int a = Character.getNumericValue('3'); 
int a = Integer.parseInt(String.valueOf('3'); 
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; 
}