Я пытаюсь использовать потоки Java для чтения текстового файла с многострочными записями
У меня есть текстовый файл, состоящий из записей, каждая запись в одной или нескольких строках, разделенных пустыми строками. Я пытаюсь сгенерировать записи, используя потоки Java, и возникают проблемы
import java.util.*;
import java.io.*;
import java.nio.file.*;
import java.util.stream.*;
public class Jstream {
public static void main(String[] args) {
new Jstream().run(args);
}
private void run(String[] args) {
String input = (args.length == 0) ? "test.in" : args[0];
try
{
Path path = Paths.get(input);
FileReader reader = new FileReader(input);
Scanner scanner = new Scanner(reader).useDelimiter("^\\s*$");
Stream<String> streamOfRecords = StreamSupport.stream(
Spliterators.spliteratorUnknownSize(scanner,
Spliterator.ORDERED), false);
List<String> result =
streamOfRecords
.map(l -> l.replaceAll("\n", " "))
.map(l -> l.replaceAll("\r", " "))
.map(String::trim)
.collect(Collectors.toList());
for(String s : result)
System.out.println("-> " + s);
} catch(Exception e)
{
System.out.println(e.toString());
}
}
}
Ввод может быть
this is
a
single record
here is the next record followed by a line with just a space
finally
our
last
record
Я бы хотел увидеть что-то вроде
-> this is a single record
-> here is the next record followed by a line with just a space
-> finally our last record
Мне все равно, сколько пробелов между словами в записи, если их хотя бы 1. Я заставил его работать для useDelimiter ("\ n \ n"), но если пустая строка имела пробел это не удалось.