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

读取含分散数字的TXT文件,拆分字符串数组遇异常问题

解决方法

问题根源

你的代码逻辑有两个核心问题:

  1. nextLine()会读取整行内容(包括空行),而数字所在行的前面有大量连续空格,用split(" ")分割时,会生成大量空字符串元素,真正的数字不在sub[0]位置
  2. 你没有将每行的有效数字收集起来,而是单次循环处理单行就打印,自然无法得到包含所有数字的数组

修正方案一:直接用Scanner的next()方法(最简便)

Scanner的next()方法默认以**任意空白字符(空格、换行、制表符等)**作为分隔符,会自动跳过所有空白,直接读取每个独立的数字字符串,完全不用手动处理拆分:

File file = new File(s);
List<String> numList = new ArrayList<>();
try {
    Scanner in = new Scanner(file);
    // 每次读取一个非空白的数字字符串
    while (in.hasNext()) {
        numList.add(in.next());
    }
    // 转成目标数组
    String[] sub = numList.toArray(new String[0]);
    // 测试输出
    for (String num : sub) {
        System.out.println(num);
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

修正方案二:逐行处理并过滤有效内容

如果坚持用nextLine(),需要先过滤空行,再对每行内容去前后空白,提取有效数字:

File file = new File(s);
List<String> numList = new ArrayList<>();
try {
    Scanner in = new Scanner(file);
    while (in.hasNextLine()) {
        String line = in.nextLine().trim();
        // 跳过空行
        if (!line.isEmpty()) {
            numList.add(line);
        }
    }
    String[] sub = numList.toArray(new String[0]);
    // 测试输出
    for (String num : sub) {
        System.out.println(num);
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

原有方法失效的原因

  • replace('\n', ' ')无效:nextLine()读取的行本身已经去掉了换行符,换行符不在当前行的字符串里
  • split(" ")只能分割单个空格:连续空格会生成多个空元素,比如" 1234".split(" ")会得到["", "", "", "", "1234"],数字在索引4的位置,不是索引0
  • 注释里的replaceAll("\\s*[\\r\\n]+\\s*", "")逻辑错误:nextLine()已经处理了换行,当前行没有换行符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:05:30