查找文件中是否存在字符串的最佳方法

may*_*r2j 2 java string file

我有一个包含数千行的文本文件.查找文件中是否存在某个字符串的最佳方法是什么?

通过将整个文件读入字符串然后使用string.contains方法或使用方法创建所有行的列表Files.readAllLines然后循环遍历列表中的每一行并检查该行是否包含所需的字符串?

更新:我使用的是Java 7.搜索限制为每个文件1-2个字符串搜索(10个文件).要搜索的字符串随文件而变化.如果找到字符串,我想停止搜索.

i_a*_*ero 6

考虑到您使用 Java 8 并且文件大小很大,最好使用Streams API。可能有两种情况:一种是您找到包含要返回的行的那一刻stringToSearch,或者您想要探索所有查找stringToSearch. 示例代码如下:

String fileName = "c://SomeFile.txt";
String stringToSearch = "dummy";
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
     // Find first
     Optional<String> lineHavingTarget = stream.filter(l -> l.contains(stringToSearch)).findFirst();
     // search all
     stream.filter(l -> l.contains(stringToSearch)).forEach(System.out::println);
     // do whatever
    } catch (IOException e) {
         // log exception
    }
Run Code Online (Sandbox Code Playgroud)

因此读取文件的所有行似乎是个坏主意。最好逐行阅读。如果您有兴趣了解最快的字符串搜索算法,请查看链接。


小智 5

由于文件包含很多行,因此最好逐行读取该文件,而不是将所有内容都放入程序存储器中.所以基本上,读一行检查你的字符串是否存在并继续前进.