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

Java读取文本文件整数并将每行拆分至数组的实现问询

Got it,我来帮你完善这段代码,实现把文本文件中的整数提取到数组里的需求。先看完整的实现,再给你拆解关键修改点:

完善后的完整代码
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

public class ReadGraphIntegers {
    public static void main(String[] args) {
        Path objPath = Paths.get("graph.txt");
        if (Files.exists(objPath)) {
            File objFile = objPath.toFile();
            // 用List动态收集所有整数,避免提前不知道总数量的问题
            List<Integer> integerList = new ArrayList<>();
            
            try (BufferedReader in = new BufferedReader(new FileReader(objFile))) {
                String line;
                // 把读行操作整合到循环条件里,更简洁
                while ((line = in.readLine()) != null) {
                    // 分割任意空白字符(空格、制表符、多个连续空格都能处理)
                    String[] stringArray = line.split("\\s+");
                    for (String numStr : stringArray) {
                        // 跳过split可能产生的空字符串(比如行首/行尾的空白)
                        if (!numStr.isEmpty()) {
                            try {
                                int num = Integer.parseInt(numStr);
                                integerList.add(num);
                            } catch (NumberFormatException e) {
                                // 遇到非整数内容时打印警告,不中断程序
                                System.err.println("跳过无效的数字格式: " + numStr);
                            }
                        }
                    }
                }
            } catch (Exception e) {
                // 处理文件读取时的IO异常
                e.printStackTrace();
            }
            
            // 把List转换为int数组,满足你存入数组的需求
            int[] intArray = new int[integerList.size()];
            for (int i = 0; i < integerList.size(); i++) {
                intArray[i] = integerList.get(i);
            }
            
            // 可以在这里验证结果,比如打印数组内容
            for (int num : intArray) {
                System.out.print(num + " ");
            }
        } else {
            System.err.println("指定文件不存在: " + objPath);
        }
    }
}
关键修改点
  • 用List动态收集整数:原代码每次循环创建一个新的int数组,只能存储单行的整数。如果文件有多行,或者你需要所有整数放到一个数组里,用ArrayList<Integer>可以动态添加,避免提前不知道总元素数量的问题。
  • 补全字符串转整数的逻辑:原代码里的String...没写完,这里用Integer.parseInt(numStr)把分割后的字符串转成int类型,添加到List中。
  • 增加异常处理:
    • 捕获NumberFormatException:防止文件里出现非整数内容导致程序崩溃,同时打印警告提示跳过的无效内容。
    • 捕获IO异常:处理文件读取时可能出现的错误(比如权限问题、文件损坏等)。
  • 优化循环写法:把line = in.readLine()整合到while循环条件里,避免重复赋值,代码更简洁。
  • 处理空字符串:split方法在遇到行首/行尾空白时会产生空字符串,增加判断跳过这些无效内容,避免解析错误。
补充说明

如果你的文件只有一行(就像你给出的示例内容那样),这段代码同样能正常工作,会把所有整数收集到同一个数组里。测试的时候,你可以打印intArray的内容,验证是否和文件里的数字一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:56:12