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
相关产品推荐
相关产品推荐

