【发布时间】:2022-08-05 22:56:37
【问题描述】:
我试图摆脱while ((line = br.readLine()) != null),但事实证明,在这种情况下,流的限制很难以优雅的方式克服。我想要匹配某个标准的第一行和匹配某个标准之前的最后一行。这似乎是我能做的最好的,但它只有在以正确的顺序遇到行时才有效,因此它不会提前终止。他们也是吗?从文档中很难分辨。
String[] savedLines = { \"\", \"\", \"\" };
try (Stream<String> lines = Files.lines(file)) {
lines.allMatch(line -> {
if (line.startsWith(s1)) {
savedLines[0] = line;
else if (line.startsWith(s2) && line.contains(s3)) {
savedLines[1] = line;
} else if (line.startsWith(s4)) {
savedLines[2] = line;
return false;
}
return true;
});
}
-
您可以获得
List<String> lines = Files.readAllLines(Path),但缺点是此方法不会流式传输,它将所有内容加载到您的 RAM 中,这使得对于非常大的文件无法使用。据我所知,然后对这些行进行排序,第一行是结果列表中的第一个条目。