Java将整数各位存入ArrayList:转字符串法下字符转整数环节遇阻
代码问题排查与修正
现有代码存在的问题
- 集合初始化未关联成员变量:代码中单独写了
new ArrayList<Integer>()语句,但没有将实例赋值给类成员digitList,此时digitList仍为null,执行add操作会触发空指针异常 - 类型转换逻辑错误:直接将
StringN.charAt(i)的返回值传入add方法时,char类型会自动转为对应的ASCII码值存储(例如字符'2'会被存为整数50,而非目标值2),不符合存储各位数字的需求 - 冗余变量:手动维护的index变量没有存在必要,ArrayList的add方法默认按追加顺序在末尾插入元素,直接调用即可
- 边界兼容缺失:如果传入的整数为负数,转字符串后首位为'-'字符,按当前逻辑会将'-'对应的ASCII值存入集合,需要做兼容处理
核心转换实现
ASCII编码中数字字符'0'~'9'的编码值是连续递增的,两种常用的字符转数字方式都可以实现需求:
- 基础方式:用当前字符的编码值减去'0'的编码值,即可得到对应整数。例如
'8' - '0'的运算结果就是整数8 - 工具类方式:直接调用JDK提供的
Character.getNumericValue(char)方法,可直接返回字符对应的数字值,兼容场景更多
修正后可运行的完整代码
import java.util.ArrayList; class Digits{ ArrayList<Integer> digitList; Digits(int num) { // 初始化集合并赋值给成员变量 digitList = new ArrayList<Integer>(); // 对入参取绝对值,避免负号字符干扰,可根据实际需求调整 String numStr = Integer.toString(Math.abs(num)); for(int i = 0; i < numStr.length(); i++) { // 转换字符为对应数字 int digitValue = numStr.charAt(i) - '0'; digitList.add(digitValue); } } } public class digitListclass { public static void main(String[] args) { // 功能测试 Digits digitGroup = new Digits(9876); System.out.println(digitGroup.digitList); // 运行后输出 [9, 8, 7, 6] } }
注意:如果业务上需要保留负数的符号(比如额外存储负号标记),可以去掉取绝对值的逻辑,在遍历到'-'字符时做特殊处理即可。
内容的提问来源于stack exchange,提问作者Selina
相关产品推荐
相关产品推荐

