我有一个包含数千行的文本文件.查找文件中是否存在某个字符串的最佳方法是什么?
通过将整个文件读入字符串然后使用string.contains方法或使用方法创建所有行的列表Files.readAllLines然后循环遍历列表中的每一行并检查该行是否包含所需的字符串?
更新:我使用的是Java 7.搜索限制为每个文件1-2个字符串搜索(10个文件).要搜索的字符串随文件而变化.如果找到字符串,我想停止搜索.
考虑到您使用 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)
因此读取文件的所有行似乎是个坏主意。最好逐行阅读。如果您有兴趣了解最快的字符串搜索算法,请查看此链接。