charAt方法返回非预期值问题求助
问题解答:charAt返回ASCII码而非数字值的原因
嘿,这个坑我之前踩过!你遇到的问题其实是Java中char类型的特性导致的:
核心原因:
charAt()方法返回的是char类型的字符,而不是对应的数字值。在ASCII编码里,字符'0'对应的十进制数值就是48,当你直接把这个char赋值给int变量时,Java会自动将其转换为对应的ASCII码,所以你得到了48而不是预期的0。为什么循环遍历能得到正确值?
大概率是你在循环里直接输出了char字符本身(比如System.out.println(char)),或者在循环中做了隐式转换(比如和'0'相减),这时候Java会把字符当成可视化的数字来处理,所以看起来结果是对的。
解决办法
这里有两种简单的方式可以得到正确的数字值:
方法1:利用ASCII码的连续性,减去字符'0'
因为字符'0'到'9'的ASCII码是连续递增的('0'=48,'1'=49...'9'=57),所以用目标字符减去'0'就能得到对应的数字:
String numeroDoc = "20298729700"; int lastNumber = numeroDoc.charAt(numeroDoc.length() - 1) - '0'; // 得到0
方法2:使用Character.getNumericValue()方法
这个方法是Java提供的专门用于获取字符对应数字值的工具方法,可读性更强:
String numeroDoc = "20298729700"; int lastNumber = Character.getNumericValue(numeroDoc.charAt(numeroDoc.length() - 1)); // 得到0
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

