Создание массива с вводом из textFile с использованием BufferedReader - PullRequest
0 голосов
/ 02 декабря 2018

Я заставляю файл читать текстовый файл с информацией о рецептах и ​​форматировать его.Для этого я использую цикл, однако у меня возникла проблема с чтением.Это образец одного рецепта в текстовом файле, который я использую в качестве ввода:

"id": 44330 
"cuisine": "indian"
"ingredients": 
"butter"
"peanut butter"
"chuck"
"curry powder"
"unsalted dry roast peanuts"
"coconut milk"
"brown sugar"

И это мой код, который должен пройти через каждый элемент и сохранить его в массиве.Моя проблема в том, что я думаю, что мне нужно сделать еще один набор ингредиентов, так как каждый образец рецепта будет иметь разное количество ингредиентов.Я не уверен, как решить эту проблему или как кодировать неопределенный массив:

while (currentLine != null) {

    String[] RecipeId = currentLine.split("\\s+");
    String idName = RecipeId[0];
    int id = Integer.valueOf(RecipeId[1]);
    String cuisine = RecipeId[2];
    String cuisinetype = RecipeId[3];
    String[] ingredientsList = currentLine.split("\\s+");
    String ingredientOne = ingredientsList[];


    recipesFormat.add(new Student(idName, id,cuisine,cuisinetype));
    recipesIngredients.add(new Ingredients(ingredientsList));
}

1 Ответ

0 голосов
/ 02 декабря 2018
class Receipt {

    private int id;
    private String cuisine;
    private ArrayList<String> ingredients;

    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getCuisine() { return cuisine; }
    public void setCuisine(String cuisine) { this.cuisine = cuisine; }
    public ArrayList<String> getIngredients() { return ingredients; }
    public void setIngredients(ArrayList<String> ingredients) { this.ingredients = ingredients; }

}

public List<Receipt> readReceipts() {

    List<Receipt> receipts = new ArrayList<>();
    Receipt receipt = null;

    try (BufferedReader r = new BufferedReader(new FileReader(new File("/path/to/input.txt")))) {

        String line;
        while((line = r.readLine()) != null) {

            // new receipt
            if(line.startsWith("\"id\":")) {

                // add old
                if(receipt != null)
                    receipts.add(receipt);

                receipt = new Receipt();

                receipt.setId(Integer.valueOf(line.split(":\\s*")[1].trim()));
                line = r.readLine();
                receipt.setCuisine(line.split(":\\s*")[1].replaceAll("\"", "").trim());
                line = r.readLine(); // skip this line
                receipt.setIngredients(new ArrayList<>());
            }
            else {
                receipt.getIngredients().add(line.replaceAll("\"", ""));
            }

        }

        // last fetched receipt
        receipts.add(receipt);

    } catch (Exception e) {
        e.printStackTrace();
    }

    return receipts;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...