如何读取文本文件中以空行分隔的食谱数据并生成对应Recipe对象?
实现方案
你只需要调整readFile方法的读取逻辑,以空行为分割触发单份食谱的生成即可,具体修改如下:
修改后的readFile方法代码
private void readFile(String fileName){ //读取食谱文件的方法 ArrayList<String> currentRecipeLines = new ArrayList<>(); //存储当前正在读取的单份食谱的所有行 try { Scanner file = new Scanner(Paths.get(fileName)); while(file.hasNextLine()){ String line = file.nextLine().trim(); // 去掉首尾空白字符,兼容带空格的空行 if (line.isEmpty()) { // 读到空行代表当前食谱读取完毕 if (!currentRecipeLines.isEmpty()) { // 避免连续空行生成无效空食谱 createRecipe(currentRecipeLines); currentRecipeLines.clear(); // 清空临时列表准备读取下一份食谱 } continue; } currentRecipeLines.add(line); } // 循环结束后处理最后一份食谱(最后一份食谱末尾可能没有空行) if (!currentRecipeLines.isEmpty()) { createRecipe(currentRecipeLines); } } catch (Exception e) { System.out.println("Error: " + e.getMessage()); } }
改动说明
- 临时列表命名调整为
currentRecipeLines更贴合语义,你也可以保留原来的命名 - 每读到空行时就触发当前已读取食谱的生成逻辑,同时清空临时列表
- 增加了循环结束后的兜底处理,避免最后一份食谱因为末尾没有空行被遗漏
- 增加了空行场景下对临时列表的非空判断,避免文件开头、中间连续空行导致生成无效的空食谱
你的原有createRecipe方法不需要做任何修改,就可以正常生成多份Recipe对象存入RecipesManager中。
内容的提问来源于stack exchange,提问作者fdama
相关产品推荐
相关产品推荐

