Сохраняйте значения в двух разных массивах - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь прочитать строки из .txt-файла, который пока работает хорошо. Проблема, с которой я борюсь, заключается в том, что файл содержит два значения на строку, которые я хочу сохранить в двух разных массивах. Текстовый файл выглядит следующим образом:

текстовый файл

Мой метод пока выглядит так: (сохраняет значения только в одном массиве)

    File file = new File(txt);

    if (!file.canRead() || !file.isFile())  // Prüfen ob Datei gelesen werden kann
        System.exit(0);

    BufferedReader in = null;
    try {
        in = new BufferedReader(new FileReader(txt));
        String zeile = null;
        int zeilennummer = 0;
        // Es wird solange gelesen wie Zeilen vorhanden sind
        while ((zeile = in.readLine()) != null) {
            teilen = zeile.split("    "); // Zeile wird an Leerzeichen gesplittet
            zeilennummer++;


            preis = new int[anzahlTanstellen];

            // alle Entfernungen und Preise der Tankstellen
            if (zeilennummer > 5) {
                for (int i = 0; i < teilen.length; i++) {
                    preis[i] = Integer.parseInt(teilen[i]);
                    System.out.println(preis[i]);
                }
            }
        }

    } catch (IOException e) {
        // Bei Fehlern wird eine IO-Exception geworfen
        e.printStackTrace();
    } finally {
        if (in != null)
            try {
                in.close();
            } catch (IOException e) {
            }
    }
}

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Предполагается, что ваша цель - иметь два списка / массива, один из которых содержит значения первого столбца значений в файле, а другой - значения второго столбца.

Поскольку вы знаете каждую строку содержит два столбца, рассматривайте их как таковые, вместо использования l oop в результате разделения. Смотрите мои комментарии и изменения в приведенном ниже коде.

File file = new File(txt);

if (!file.canRead() || !file.isFile())  // Prüfen ob Datei gelesen werden kann
    System.exit(0);

// use arraylists because you don't know how many lines are in the file
ArrayList<Integer> column1 = new ArrayList<>();
ArrayList<Integer> column2 = new ArrayList<>();

BufferedReader in = null;
try {
    in = new BufferedReader(new FileReader(txt));
    String zeile = null;
    int zeilennummer = 0;
    // Es wird solange gelesen wie Zeilen vorhanden sind
    while ((zeile = in.readLine()) != null) {
        teilen = zeile.split("    "); // Zeile wird an Leerzeichen gesplittet
        zeilennummer++;

        // this is replaced by the two arraylists
        //preis = new int[anzahlTanstellen];

        // alle Entfernungen und Preise der Tankstellen
        if (zeilennummer > 5) {
            if(teilen.length != 2) {
                // handle this error. skip the line maybe? ignore? throw an exception?
            } else {
                // store the first value in column1 and the second in column2
                column1.add(Integer.parseInt(teilen[0]));
                column2.add(Integer.parseInt(teilen[1]));
            }
        }
    }

} catch (IOException e) {
    // Bei Fehlern wird eine IO-Exception geworfen
    e.printStackTrace();
} finally {
    if (in != null)
        try {
            in.close();
        } catch (IOException e) {
        }
}

// now do whatever you want with your two columns
0 голосов
/ 19 июня 2020

После прочтения строки обрежьте ее, а затем используйте класс StringTokenizer для ее токенизации / разделения. Первый токен будет иметь первый номер, а второй токен будет иметь второй номер. сохранить их в двух разных массивах.

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