簡體   English   中英

如何不逐行查找 BufferedReader class object 是否包含特定單詞?

[英]How to find if the BufferedReader class object contains a specific word without going through line by line?

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

有為其生成日志的固定文件。 所以這些文件的名稱:Image_1,Image_5,Image_10,Image_25。

為了獲取為其生成日志的文件的名稱,我必須逐行遍歷 BufferedReader br 並檢查所有 4 個名稱,如果該名稱出現在某個需要大量時間的行中。

如果 BufferedReader object 包含特定單詞,是否有任何方法可以遍歷這 4 個名稱並檢查 Bufferedreader。 BufferedReader 的類似 String.contains("s") 的東西。 是否有可能以這種方式或更好的選擇?

可以為 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 緩沖區可能以拆分的多字節序列結束。 不難處理,但為什么不使用簡單的代碼,而不取決於緩沖區大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM