在Java中如何从TXT文件提取指定内容构建图用于Prim算法实现
Java实现文本文件拆分提取的方案
核心实现逻辑
- 直接在读取行的循环内处理每行内容,不需要额外嵌套循环
- 调用String类的
split("\\s+")方法按任意空白字符分割每行,得到长度为3的数组,三个元素依次对应第一个节点、第二个节点、边的权重 - 将权重字符串转为数值类型后,即可调用你已有的Node、Graph类的相关方法构建图结构
修正后的Graph类代码
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; class Graph { // 假设你已有添加边的方法,示例方法名:addEdge(String node1, String node2, int weight) public Graph(File doc){ // 用try-with-resources语法自动关闭流,避免资源泄漏 try (BufferedReader br = new BufferedReader(new FileReader(doc))) { String s; while ((s = br.readLine()) != null) { // 跳过空行 if (s.trim().isEmpty()) { continue; } // 按任意空白字符分割行 String[] parts = s.split("\\s+"); // 拆分结果校验,避免格式错误导致数组越界 if (parts.length == 3) { String node1 = parts[0]; String node2 = parts[1]; int weight = Integer.parseInt(parts[2]); // 调用你自己的加边方法构建图 addEdge(node1, node2, weight); // 测试打印可以留着验证拆分结果 System.out.printf("节点1:%s,节点2:%s,权重:%d%n", node1, node2, weight); } } } catch (IOException e) { e.printStackTrace(); } } // 这里是示例的加边方法,替换成你自己已有的实现即可 private void addEdge(String node1, String node2, int weight) { // 你的图构建逻辑 } }
注意事项
\\s+作为分隔符可以兼容单行内多个空格、制表符等多种空白分隔场景,比固定使用单个空格拆分兼容性更强- 如果你的权重是小数类型,把
Integer.parseInt替换为Double.parseDouble即可 - 增加了空行判断和拆分结果长度校验,避免文件格式异常导致程序报错
内容的提问来源于stack exchange,提问作者Tsuziko
相关产品推荐
相关产品推荐

