我正在创建一个代码,该代码读取并格式化内部包含食谱的文本文件。
到目前为止,我遇到了2个问题。食谱是这样的:
“ id”:44330
“美食”:“印度人”
“成分”:
“黄油”
“花生酱”
“查克”
“咖喱粉”
“无盐干烤花生”
椰子奶
红糖
“大蒜”
“泰国鱼露”
“土豆”
牛肉汤
“洋葱”
我不知道如何使程序读取多行以执行以下输出: id,食谱名称,料理类型,成分1,成分2,成分3,成分4,...,成分n
我为此使用了一个循环,并考虑过将一些内容添加到程序中,以便一旦存储了第一行,就可以转到下一行。但是我不知道该如何添加------所在的位置。
while (currentLine != null) {
String[] RecipeId = currentLine.split("\\s+");
String idName = RecipeId[0];
int id = Integer.valueOf(RecipeId[1]);
------
String cuisineDrop = RecipeId[3];
String cuisineName = RecipeId[4];
------
String[] ingredients = RecipeId[5];
recipesFormat.add(new Recipe(idName, id, cuisineDrop, cuisineName, ingredients));
}
我的第二个问题是配料部分将如何工作,因为我需要该程序以阵列的形式存储它具有的配方的任意数量的配料,而且我不知道如何使它读取每种配料并在存储之前将其存储下一个食谱。有帮助吗?
答案 0 :(得分:0)
您可以使用pojo类(例如Recipe
)来实现此目的,该类包含三个成员变量-id,Cuisine和配料的 list 。
public class Recipe {
private String id;
private String cuisine;
private List<String> ingredients = new ArrayList<>();
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCuisine() {
return cuisine;
}
public void setCuisine(String cuisine) {
this.cuisine = cuisine;
}
public List<String> getIngredients() {
return ingredients;
}
public void addIngredients(String ingredients) {
this.ingredients.add(ingredients);
}
}
现在使用:
public static void main(String[] args) throws FileNotFoundException {
final String PATH = "recipe.txt";
Scanner sc = new Scanner(new File(PATH));
List<Recipe> listOfRecipes = new ArrayList<>();
String currLine = sc.nextLine();
while (sc.hasNextLine() && currLine.startsWith("\"id\"")) {
Recipe recipe = new Recipe();
recipe.setId(currLine.substring(currLine.indexOf(":") + 2));
currLine = sc.nextLine();
recipe.setCuisine(currLine.substring(currLine.indexOf(":")+2).replaceAll("\"",""));
currLine = sc.nextLine();
while (sc.hasNextLine()) { // <--- finding all ingredients
currLine = sc.nextLine();
if (currLine.startsWith("\"id\"")) {
break;
}
recipe.addIngredients(currLine.replaceAll("\"", ""));
}
listOfRecipes.add(recipe);
}
// print all recipes
listOfRecipes.forEach(System.out::println);
}
逻辑:
recipe
在文件中用id
表示的食谱。recipe
对象中的一个。