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

Java如何按分隔符拆分文本文件内容存入两个独立数组

实现方案

你原有代码两次遍历文件的逻辑完全可以复用:第一次遍历统计行数用于初始化定长数组,第二次遍历逐行处理内容即可。由于要求只能使用数组存储,我们直接根据统计得到的行数初始化两个一维数组,分别存储名称和数值,最终通过二维数组封装返回(Java不支持方法返回多个值,二维数组是纯数组实现,不违反作业要求)。

完整修改后代码

public static String[][] readFile(String fileName) {
    Scanner fileScanner = null;
    try {
        fileScanner = new Scanner(new File(fileName));
        // 第一次遍历:统计文件有效行数
        int lineCount = 0;
        while (fileScanner.hasNextLine()) {
            fileScanner.nextLine();
            lineCount++;
        }
        if (lineCount <= 0) {
            return null;
        }

        // 初始化两个定长数组,分别存储名称、对应数值
        String[] nameArr = new String[lineCount];
        String[] valueArr = new String[lineCount];

        // 第二次遍历:逐行拆分内容存入对应数组
        fileScanner = new Scanner(new File(fileName));
        for (int i = 0; i < lineCount; i++) {
            if (!fileScanner.hasNextLine()) {
                break;
            }
            String line = fileScanner.nextLine().trim();
            // 跳过空行避免解析错误
            if (line.isEmpty()) {
                continue;
            }
            // 按制表符拆分,\\t+ 匹配1个或多个连续制表符,适配不同分隔宽度
            String[] lineParts = line.split("\\t+");
            // 校验行格式,避免下标越界
            if (lineParts.length >= 2) {
                nameArr[i] = lineParts[0].trim();
                valueArr[i] = lineParts[1].trim();
            }
        }

        // 返回二维数组:下标0为名称数组,下标1为数值数组
        return new String[][]{nameArr, valueArr};

    } catch (IOException e) {
        System.out.println(e);
    } catch (Exception e) {
        System.out.println(e);
    } finally {
        // 释放文件资源
        if (fileScanner != null) {
            fileScanner.close();
        }
    }
    return null;
}

调用示例

public static void main(String[] args) {
    String[][] fileContent = readFile("data.txt");
    if (fileContent != null) {
        String[] names = fileContent[0];
        String[] values = fileContent[1];
        // 直接操作两个数组即可,例如下遍历输出
        for (int i = 0; i < names.length; i++) {
            if (names[i] != null) {
                System.out.printf("条目:%s,数值:%s%n", names[i], values[i]);
            }
        }
    }
}

关键说明

  • 拆分逻辑使用split("\\t+")是正则匹配写法,可自动适配名称和数值之间的多个连续制表符,兼容示例中不同条目分隔宽度不一致的情况。
  • 增加了空行跳过、行格式校验逻辑,避免文件存在空行、格式错误行时触发数组下标越界异常。
  • 全程仅使用数组作为存储结构,未使用List、Map等其他容器,完全符合作业要求。
  • 新增了Scanner资源关闭逻辑,避免文件资源泄露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:06:19