Чтение нескольких строк из файла в одну строку - PullRequest
0 голосов
/ 12 октября 2018

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

Num: 10101
Name: File_8
Description: qwertz qwertz
qwertz qwertz ztrewq
Quantity: 2

Порядок свойств (num, name, description, number) не определен.Я использую следующий код для чтения данных из файла и сохранения в массиве.

BufferedReader abc = new BufferedReader(new FileReader(file));
    while ((strLine = abc.readLine()) != null) {
        if(strLine.startsWith("Name:")){
        data[0] = strLine.substring(strLine.indexOf(" ")+1);
        data[0].trim();
       }
    }

Строки между префиксами должны храниться в строке.

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Использование java.util.Scanner

Для захвата сопоставлений:

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;
    }
}
values.put(key, value.trim());

for (Map.Entry<String, String>  mapEntry: values.entrySet()) {
    System.out.println(mapEntry.getKey() + " -> '" + mapEntry.getValue() + "'");
}

отпечатков:

Description -> 'qwertz qwertz qwertz qwertz ztrewq'
Num -> '10101'
Quantity -> '2'
Name -> 'File_8'
0 голосов
/ 12 октября 2018

хорошо, поэтому все, что передается в data [0], должно быть объединено в строку?Почему бы вам не использовать класс StringBuilder таким образом?

StringBuilder stringBuilder = new StringBuilder();
BufferedReader abc = new BufferedReader(new FileReader(file));
    while ((strLine = abc.readLine()) != null) {
        if(strLine.startsWith("Name:")){
        data[0] = strLine.substring(strLine.indexOf(" ")+1);
        data[0].trim();
        stringBuilder.append(data[0]);
       }
    }
0 голосов
/ 12 октября 2018

Чтение нескольких строк из файла в одну строку

Если вы читаете содержимое в массив, вы можете использовать join:

String.join(delimiter, elements);

Пример.с разделителем , и массивом:

String str = String.join(",", new String[]{"1st line", "2nd line", "3rd line"});

Создает вывод: 1st line,2nd line,3rd line


Или непосредственно считывается в строку:

// assume we have a function
byte[] encoded = Files.readAllBytes(Paths.get(path));
return new String(encoded, encoding);
...