我正在寻找一个小代码片段,它会在文件中找到行并复制与搜索字符串匹配的行。但是,我担心我找不到这样的片段。例如,如果我在一个文件后面有行:
aaaa aaa xx
bbbb bb
cccc cx xx
bbbb ax aa
yyyy yd cd
好的是拥有像public void copyFoundLines(String searchStrings)
这样的功能。举个例子,如果我想搜索aa和xx,我会得到一个像这样的新文件:
aaaa aaa xx
cccc cx xx
bbbb ax aa
答案 0 :(得分:0)
你的问题不清楚,但这是一种方法:
public static void copyMatchingLines(final Path src, final Path dst,
final String... searchStrings)
throws IOException
{
final Predicate<String> predicate
= s -> Arrays.stream(searchStrings).anyMatch(s::contains);
try (
final Stream<String> lines = Files.lines(src, StandardCharsets.UTF_8);
final BufferedWriter writer = Files.newBufferedWriter(dst, StandardCharsets.UTF_8,
StandardOpenOption.CREATE_NEW);
) {
lines.filter(predicate).forEach(line -> {
writer.write(line);
writer.newLine();
});
writer.flush();
}
}