如何查找BufferedReader类对象是否包含特定单词而无需逐行浏览?

我有一些日志文件,其中生成日志的文件的名称写在未知行上。

有些固定文件会为其生成日志。因此,这些文件的名称为:Image_1,Image_5,Image_10,Image_25。

要获取要为其生成日志的文件的名称,我必须逐行遍历BufferedReader br并检查所有4个名称(如果此名称出现在某行中会花费很多时间。) / p>

是否有任何方法可以迭代这4个名称,并在Bufferedreader中检查BufferedReader对象是否包含特定单词。类似于String.contains(“ s”)的BufferedReader。这样可以还是更好的选择呢?

ww8q2008 回答:如何查找BufferedReader类对象是否包含特定单词而无需逐行浏览?

可以给BufferedReader缓冲区大小,但是您必须实际读取行。最简单的方法是:

Path path = Paths.get("my.log");
// Assume UTF-8 (is default):
Optional<String> img = Files.lines(path)
    .filter(line -> line.matches("Image_(10?|5|25).*"))
    .findAny();
String file = img.orElse("NOT FOUND");

或更佳

try (Stream<String> in = Files.lines(path)) {
    Optional<String> img = in
        .filter(line -> line.matches("Image_(10?|5|25).*")
        .findAny();
    String file = img.orElse("NOT FOUND");
}

说明:

一个人可以读取一些字节缓冲区,然后将其转换为字符串以进行搜索。 问题在于,对于UTF-8,缓冲区可能会在拆分的多字节序列上结束。 不难处理,但是为什么不使用简单的代码,而不取决于缓冲区的大小。

本文链接:https://www.f2er.com/3108168.html

大家都在问