Java使用Integer.parseInt解析逗号分隔输入时触发NumberFormatException问题
异常触发原因
你的代码逻辑是从输入字符串的开头截取到第一个逗号的位置,再将截取到的子串转为整数:
- 当输入为
22, 23时,第一个逗号的下标为2,截取到的子串是22,符合整数格式要求,可正常转换。 - 当输入为
22 ,23时,逗号前多了一个空格,第一个逗号的下标变为3,截取到的子串是22(末尾带空格),Integer.parseInt()不支持解析包含空白字符的数字字符串,因此抛出NumberFormatException异常。
修复方案
有三种常用的修复方式,可根据实际场景选择:
- 截取子串后去除首尾空白
仅修改整数转换的单行代码即可,适配逗号前后存在零散空格的场景:
int x = Integer.parseInt(str.substring(0, str.indexOf(",")).trim());
- 先清除整行所有空白再处理
如果输入的数字本身不会包含空格,可以先统一移除整行的所有空白字符,再做后续处理:
Scanner input = new Scanner (System.in); String str = input.nextLine(); // 移除所有空白字符 str = str.replaceAll("\\s+", ""); int x = Integer.parseInt(str.substring(0, str.indexOf(","))); System.out.println(x);
- 用逗号分割字符串后逐个处理(扩展性最好)
如果后续需要同时取逗号后的第二个数值,推荐用分割方式处理,逻辑更清晰:
Scanner input = new Scanner (System.in); String str = input.nextLine(); String[] numParts = str.split(","); // 分别处理两个数值 int x = Integer.parseInt(numParts[0].trim()); int y = Integer.parseInt(numParts[1].trim()); System.out.println(x);
内容的提问来源于stack exchange,提问作者BDR
相关产品推荐
相关产品推荐

