Получить однострочные и многострочные значения из текстового файла - PullRequest
0 голосов
/ 06 ноября 2018

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

               if(nfo_file.exists() && !nfo_file.isDirectory()) {
                    Scanner scanner = new Scanner(nfo_file);
                    Map<String, String> values = new HashMap<>();
                    String line, key = null, value = null;
                    while (scanner.hasNextLine()) {
                        line = scanner.nextLine();
                        if (line.contains(":")) {
                            if (key != null) {
                                values.put(key, value.trim());
                            }
                            int indexOfColon = line.indexOf(":");
                            key = line.substring(0, indexOfColon);
                            value = line.substring(indexOfColon + 1);
                        } else {
                            value += " " + line;
                        }
                    }

                    for (Map.Entry<String, String> entry : values.entrySet()) {
                        if (entry.getKey().startsWith("Description")) {
                            nfodata[0] = entry.getValue();
                        }

Пример ввода текстового файла:

Num: 10101
Name: File_8
Description: qwertz qwertz
qwertz (qwertz) ztrewq?
Neque porro quisquam est qui
Quantity: 2

В некоторых случаях он не работает, он не читает ни одной строки, а иногда читает только первую строку многострочного значения.

1 Ответ

0 голосов
/ 06 ноября 2018

Похоже, ваш код не добавит последнюю пару ключ-значение к Map.

Попробуйте:

                while (scanner.hasNextLine()) {
                    line = scanner.nextLine();
                    if (line.contains(":")) {
                        if (key != null) {
                            values.put(key, value.trim());
                            key = null;
                            value = null;
                        }
                        int indexOfColon = line.indexOf(":");
                        key = line.substring(0, indexOfColon);
                        value = line.substring(indexOfColon + 1);
                    } else {
                        value += " " + line;
                    }
                }
                if (key != null) {
                    values.put (key, value.trim());
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...