Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中字符到整数的转换_Java_Integer_Type Conversion_Character_Primitive - Fatal编程技术网

Java中字符到整数的转换

Java中字符到整数的转换,java,integer,type-conversion,character,primitive,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?那么如何将字符转换为整数 编辑:是,我知道字符。getNumericValue返回-1,如果它不是一个数值,并且对我有意义。问题是:为什么原语转换返回43 Edit2:

有人能给我解释一下这里发生了什么吗:

char c = '+';
int i = (int)c;
System.out.println("i: " + i + " ch: " + Character.getNumericValue(c));
这将打印
i:43 ch:-1
。这是否意味着我必须依赖原语转换才能将
char
转换为
int
?那么如何将
字符
转换为
整数

编辑:是,我知道
字符。getNumericValue
返回
-1
,如果它不是一个数值,并且对我有意义。问题是:为什么原语转换返回
43


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

正如文档中明确指出的,
Character.getNumericValue()
以数字形式返回字符的值。
如果字符不是数字,则返回
-1

如果要获取装箱的
字符
对象的数字Unicode码点,需要先将其解装箱:

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

字符的Javadoc#getNumericValue

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

字符
+
没有数值,因此得到-1

更新:

原语转换给出43的原因是字符“+”被编码为整数43

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

大写字母A-Z
('\u0041'到'\u005A')
,小写字母A-Z
('\u0061'到'\u007A')
,以及全宽变型
('\uFF21'到'\uFF3A'和'\uFF41'到'\uFF5A')
的数值范围为10到35。这与Unicode规范无关,Unicode规范不为这些字符值分配数值

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

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

-如果字符没有数值,则为1


和是链接。

43是“+”符号的dec ascii数字。这就解释了为什么你会得到43分。

尝试以下任一方法。这些措施应该有效:

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

您可能希望链接到该文档:您希望得到什么而不是
43
?我认为
getNumericValue
并不像您所认为的那样。这是一种将字符转换为整数的实用方法(如中所示,将字符“5”转换为整数5)。这与强制转换(将字符“5”转换为整数53)不同。关键是强制转换不会返回数字的数值。这两个操作做两件不同的事情。
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;
}