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

Java中数字字符串拆分转整数时出现NumberFormatException问题

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

内容的提问来源于stack exchange,提问作者T. J. Foster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:57:30