Java中数字字符串拆分转整数时出现NumberFormatException问题
问题原因分析
- 使用
split(" ")拆分多空格分隔的字符串时,会生成空字符串元素。比如"5 1"拆分后得到["5", "", "", "", "1"],空字符串传入Integer.parseInt会直接抛出NumberFormatException。 - 你看到的空格显示不一致,大概率是文件中的空白不是普通空格(ASCII 32),而是制表符(
\t)、全角空格(Unicode U+3000)这类特殊空白字符。这些字符无法被split(" ")识别为分隔符,导致包含空白的整串被当成单个输入去转整数,触发报错。
解决步骤
- 替换拆分规则:用
split("\\s+")替代split(" ")。\\s能匹配任意空白字符(空格、制表符、全角空格等),+表示匹配连续的一个或多个空白,这样拆分后不会生成空元素,直接得到干净的数字字符串数组:String line = "5 1 5 4 3 2"; String[] numStrs = line.split("\\s+"); for (String s : numStrs) { int num = Integer.parseInt(s); // 执行你的业务逻辑 } - 过滤空元素后转换:如果不想修改拆分规则,可以先过滤掉拆分结果中的空字符串,再进行转换:
String[] numStrs = line.split(" "); for (String s : numStrs) { String trimmed = s.trim(); if (trimmed.isEmpty()) continue; int num = Integer.parseInt(trimmed); // 执行你的业务逻辑 } - 排查特殊空白字符:打印读取到的字符串中每个字符的编码,确认空白类型:
根据编码结果,也可以针对性地用String line = "5 1 5 4 3 2"; for (char c : line.toCharArray()) { System.out.println((int) c); // 普通空格输出32,制表符输出9,全角空格输出12288 }replace把特殊空白替换成普通空格后再拆分。 - 处理小数行:针对文件中的小数行,转换前先做判断,避免直接转整数报错:
try { int num = Integer.parseInt(s); // 整数逻辑 } catch (NumberFormatException e) { // 处理小数情况,比如转成int或跳过 double d = Double.parseDouble(s); int num = (int) d; // 或者直接跳过该行 }
内容的提问来源于stack exchange,提问作者T. J. Foster
相关产品推荐
相关产品推荐

