从char数组获取整数为何得到ASCII值而非数字?求解决办法
为什么char转int得到49而不是1?解决办法看这里
嘿,这个问题我刚学Java的时候也懵过!咱们一步步来拆解:
问题原因
在Java里,char类型本质上是UTF-16编码的无符号16位整数,每个字符都对应一个特定的编码值。你拿到的'1'这个字符,对应的ASCII(属于UTF-16的子集)编码就是49,所以当你直接把char赋值给int变量时,Java会自动把这个编码值转成int类型,自然就输出49了,而不是你预期的数字1。
解决办法
这里有两种常用的靠谱方法:
方法1:利用ASCII码偏移(高效且直观)
因为阿拉伯数字字符的ASCII码是连续的,'0'对应的编码是48,'1'是49,以此类推。所以只要用目标字符减去'0',就能得到对应的数字:
String inputs = "123"; char[] inputs2 = inputs.toCharArray(); int a = inputs2[0] - '0'; // 49 - 48 = 1 System.out.println(a); // 输出1
方法2:用Character.getNumericValue()方法(更通用)
如果你的场景里可能出现非阿拉伯数字的字符(比如罗马数字、全角数字),这个方法会更稳妥,它能直接返回字符对应的数值:
String inputs = "123"; char[] inputs2 = inputs.toCharArray(); int a = Character.getNumericValue(inputs2[0]); System.out.println(a); // 输出1
需要注意的是,如果字符不是有效的数字,getNumericValue()会返回-1或者-2,所以如果要处理非数字场景,记得加判断哦。
内容的提问来源于stack exchange,提问作者PulseBeat_02
相关产品推荐
相关产品推荐

