Java (对我来说)字符数组中无法解释的值
我被一些我真的不明白的事情缠住了,我希望这里有人能理解 谁能解释一下为什么“nextOne”的值是51?很明显,表达式数组中索引2处的数字是3,那么为什么它在nextOne中存储51而不是3呢 这是:Java (对我来说)字符数组中无法解释的值,java,character-arrays,Java,Character Arrays,我被一些我真的不明白的事情缠住了,我希望这里有人能理解 谁能解释一下为什么“nextOne”的值是51?很明显,表达式数组中索引2处的数字是3,那么为什么它在nextOne中存储51而不是3呢 这是: 数组中的字符是“3”。它的Unicode值为51-它是字符U+0033 如果将nextOne的类型改为char,而不是int,则会看到“3” 理解作为字符的数字和整数值之间的差异是很重要的,同时还要理解隐藏在字符后面的数字;在Java中,它们基本上是UTF-16代码单元。因为51是数字3的ASCI
数组中的字符是“3”。它的Unicode值为51-它是字符U+0033 如果将
nextOne
的类型改为char
,而不是int
,则会看到“3”
理解作为字符的数字和整数值之间的差异是很重要的,同时还要理解隐藏在字符后面的数字;在Java中,它们基本上是UTF-16代码单元。因为51是数字
3
的ASCII值。第一个数字是3
,其ASCII代码是51。字符'3'
对应于51的整数值(它是ASCII/unicode值)。nextOne包含字符的值,在字符“3”的情况下,它是51
如果需要字符表示的数字,则需要对其进行转换。对于ASCII,这可以通过减去字符“0”的值来实现。51是三个字符的ASCII码,因为表达式
是一个字符数组,nextOne
是一个int
,所以必须将字符转换为int数字3的ASCII码是51。以下表达式将在控制台中打印“true”
System.out.println('3' == (char) 51);
有关详细信息,请查看。如果需要减去整数所需的数字,请查看字符“3”的ascii码。我做到了!它现在可以用了,没有你们我是做不到的。
然而有趣的是,你们所有人都为我提出了选择,但不是(在我看来)最终的选择。你们告诉我存储的整数是3的ASCII码,而不是实际的整数3。这让我想起了Character类中的一个方法getNumericValue(char)。使用此方法,我只需从char数组中检索整数3,而无需转换自己
nextNumber = nextNumber * 10 + Character.getNumericValue(expression[k]);
感谢@howard将链接编辑到上传的图像中nextOne
是一个整数,您将向其传递一个char值,该值可以解释为整数。。因此,“3”是51个ASCII码。@ChristofferHammarström:nextOne
已经是int
。我建议把它改成char
。数值将是相同的,但我希望它在调试器中以不同的方式显示。请尝试收集表示数字的后续字符(Character.isDigit()
),然后使用Integer.parseInt()
转换它们。或者如果你想让它们一个一个,Character.digit(char,int)
@ratchetfreak:no,每个char
只有16位。如果需要表示不在基本多语言平面中的Unicode字符,则需要具有代理项对的字符串来表示65535以上的代码点。