在Java中将字符转换为整数
Posted
技术标签:
【中文标题】在Java中将字符转换为整数【英文标题】:Converting characters to integers in Java 【发布时间】:2013-10-23 15:49:57 【问题描述】:谁能给我解释一下这里发生了什么:
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
没有成功一样。否则这意味着有两种语义等效的方式来执行相同的操作但结果不同?
【问题讨论】:
你期望得到什么而不是43
?
我不认为getNumericValue
做你认为它做的事。这是一种将字符转换为整数的实用方法(例如,将字符“5”转换为整数 5)。这与强制转换(将字符 '5' 转换为整数 53)不同。
关键是转换不会返回数字的数值。这两个操作做了两个不同的事情。
【参考方案1】:
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 规范不为这些形式分配数值字符值。
此方法返回字符的数值,作为 非负整数值;
-2 如果字符的数值不是非负整数;
-1 如果字符没有数值。
here 是链接。
【讨论】:
【参考方案2】:正如文档明确指出的那样,Character.getNumericValue()
将字符的值作为数字返回。
如果字符不是数字,则返回-1
。
如果您想获取已装箱的 Character
对象的数字 Unicode 代码点,您需要先将其拆箱:
int value = (int)c.charValue();
【讨论】:
您可能希望链接到该文档:docs.oracle.com/javase/7/docs/api/java/lang/…【参考方案3】:尝试以下任一方法。这些应该可以工作:
int a = Character.getNumericValue('3');
int a = Integer.parseInt(String.valueOf('3');
【讨论】:
【参考方案4】:来自Character#getNumericValue
的 Javadoc:
如果字符没有数值,则返回-1。 如果字符具有无法表示为的数值 非负整数(例如,小数值),则 -2 为 返回。
字符+
没有数值,所以你得到-1。
更新:
原始转换给你 43 的原因是字符“+”被编码为整数 43。
【讨论】:
【参考方案5】:43 是“+”符号的 dec ascii 数字。这就解释了为什么你会得到 43 的回报。 http://en.wikipedia.org/wiki/ASCII
【讨论】:
【参考方案6】: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;
【讨论】:
以上是关于在Java中将字符转换为整数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 中将二进制字符串转换为以 10 为底的整数