在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
?
编辑2:43是ASCII的+
,但我希望转换不成功,就像getNumericValue
没有成功。 否则,这意味着有两种语义等价的方式来执行相同的操作,但结果不同?
Character.getNumericValue(c)
java.lang.Character.getNumericValue(char ch)
返回指定的Unicode字符所表示的int
值。 例如,字符'\u216C'
(罗马数字50)将返回一个值为50的int。
字母AZ的大写('\u0041' through '\u005A')
,小写字母('\u0061' through '\u007A')
和全宽变体('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A')
表单具有从10到35的数字值。这与Unicode规范无关,Unicode规范不会为这些char值分配数值。
此方法返回字符的数字值,作为非负int值;
-2如果字符的数值不是非负整数;
-1如果该字符没有数字值。
这里是链接。
正如文档中明确指出的那样, Character.getNumericValue()
以字符的forms返回字符的值。
如果字符不是数字,则返回-1
。
如果您想要获得盒装Character
对象的数字Unicode代码点,则需要先将其解开:
int value = (int)c.charValue();
尝试下面的任何一个。 这些应该工作:
int a = Character.getNumericValue('3'); int a = Integer.parseInt(String.valueOf('3');
从Javadoc的Character#getNumericValue
:
如果该字符没有数字值,则返回-1。 如果字符的数值不能表示为非负整数(例如小数值),则返回-2。
字符+
没有数字值,所以你得到-1。
更新:
原始转换给你的原因是字符'+'被编码为整数43。
43是“+”符号的十进制数字。 这就解释了为什么你回到43。 http://en.wikipedia.org/wiki/ASCII
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; }