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

Java读取文本文件时遭遇StringIndexOutOfBoundsException异常求助

问题分析与解决方案

我来帮你拆解下这个问题——核心矛盾就是你预设每行固定75字符,但实际文件里的行只有68字符,导致字符串截取时触发了越界异常。下面一步步给你解决思路:

1. 先解决眼前的报错问题

如果只是想先让代码不崩溃,可以先给每行加个长度校验,避免硬截取超出范围:

else {
    // 先检查行长度是否满足截取要求,不满足就跳过或打日志
    if (uneLigne.length() < 74) {
        System.err.println("警告:行长度不足,跳过该行:" + uneLigne + "(长度:" + uneLigne.length() + ")");
        continue;
    }
    nations[n] = new Nation(
        uneLigne.charAt(0),
        uneLigne.substring(55,63), 
        uneLigne.substring(64,74),
        uneLigne.substring(1,15),
        uneLigne.substring(36,54)
    );
    n++;
}

2. 从根源解决:放弃固定位置截取,改用字段分割

你现在用固定字符位置截取的方式太脆弱了——只要文件里字段间的空格数和你预期的不一样,就会出错。更稳健的方式是按空格分隔字段来解析,因为你的数据是用大量空格分隔的,刚好可以用正则\\s+匹配一个或多个空格:

else {
    // 按一个或多个空格拆分每行内容
    String[] fields = uneLigne.split("\\s+");
    // 校验字段数量是否符合预期
    if (fields.length != 4) {
        System.err.println("行格式错误,跳过该行:" + uneLigne);
        continue;
    }
    // 解析各个字段:第一个字段的首字符是大陆代码,其余部分是国家名
    char codeContinent = fields[0].charAt(0);
    String nom = fields[0].substring(1);
    String capitale = fields[1];
    String superficie = fields[2];
    String population = fields[3];
    
    nations[n] = new Nation(codeContinent, superficie, population, nom, capitale);
    n++;
}

这种方式不管字段间有多少空格,都能正确拆分,完全不依赖固定字符位置,鲁棒性强很多。

3. 额外优化建议

  • 检查真实文件内容:用文本编辑器打开文件,显示所有隐藏字符(比如Notepad++的「显示所有字符」功能),看看是不是有换行符格式问题(Windows的CRLF vs Linux的LF),或者某些行真的缺少了空格。
  • 用try-with-resources自动关闭流:避免手动关闭流可能导致的资源泄漏,代码更简洁安全:
static int lireRemplir (String nomFichier, Nation[] nations) throws IOException { 
    int n = 0;
    try (BufferedReader entree = new BufferedReader(new FileReader(nomFichier))) {
        String uneLigne;
        while ((uneLigne = entree.readLine()) != null) {
            // 这里放上面的行处理逻辑
        }
    } catch (java.io.FileNotFoundException erreur) {
        System.out.println("Probléme avec l'ouverture du fichier " + nomFichier);
    }
    return n; 
}

内容的提问来源于stack exchange,提问作者Django

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:12:22