You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用Integer.parseInt解析逗号分隔输入时触发NumberFormatException问题

异常触发原因

你的代码逻辑是从输入字符串的开头截取到第一个逗号的位置,再将截取到的子串转为整数:

  • 当输入为22, 23时,第一个逗号的下标为2,截取到的子串是22,符合整数格式要求,可正常转换。
  • 当输入为22 ,23时,逗号前多了一个空格,第一个逗号的下标变为3,截取到的子串是22 (末尾带空格),Integer.parseInt()不支持解析包含空白字符的数字字符串,因此抛出NumberFormatException异常。

修复方案

有三种常用的修复方式,可根据实际场景选择:

  1. 截取子串后去除首尾空白
    仅修改整数转换的单行代码即可,适配逗号前后存在零散空格的场景:
int x = Integer.parseInt(str.substring(0, str.indexOf(",")).trim());
  1. 先清除整行所有空白再处理
    如果输入的数字本身不会包含空格,可以先统一移除整行的所有空白字符,再做后续处理:
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);
  1. 用逗号分割字符串后逐个处理(扩展性最好)
    如果后续需要同时取逗号后的第二个数值,推荐用分割方式处理,逻辑更清晰:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:36:07