小编典典

使用Java 8在文件中查找模式

java

考虑我有一个文件喜欢(只是摘录)

name: 'foobar'

foobar当我发现与时,我喜欢检索name

我目前的做法是

Pattern m = Pattern.compile("name: '(.+)'");
try (Stream<String> lines = Files.lines(ruleFile)) {
    Optional<String> message = lines.filter(m.asPredicate()).findFirst();
    if (message.isPresent()) {
        Matcher matcher = m.matcher(message.get());
        matcher.find();
        String group = matcher.group(1);
        System.out.println(group);
    }
}

看起来不太好 过度使用模式和匹配器似乎是错误的。

有没有更简单/更好的方法?特别是如果我有多个键,我喜欢这样搜索吗?


阅读 225

收藏
2020-11-01

共1个答案

小编典典

我希望有更多类似的东西,以避免两次匹配模式:

Pattern p = Pattern.compile("name: '([^']*)'");
lines.map(p::matcher)
     .filter(Matcher::matches)
     .findFirst()
     .ifPresent(matcher -> System.out.println(matcher.group(1)));

也就是说,对于每个字符串的匹配器,获取第一个匹配的字符串,对于该匹配器,将输出第一组。

2020-11-01