在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 为底的整数

在 Groovy 中将整数转换为十六进制字符串

在python中将字符串/字符转换为整数

在 JAVA 中将 IBM JMSMessageId 转换为字符串 [关闭]

如何在java中将字符串数组转换为int数组[重复]

在 C++ 中将字符转换为整数