考虑我有一个文件喜欢(只是摘录)
name: 'foobar'
foobar当我发现与时,我喜欢检索name。
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); } }
看起来不太好 过度使用模式和匹配器似乎是错误的。
有没有更简单/更好的方法?特别是如果我有多个键,我喜欢这样搜索吗?
我希望有更多类似的东西,以避免两次匹配模式:
Pattern p = Pattern.compile("name: '([^']*)'"); lines.map(p::matcher) .filter(Matcher::matches) .findFirst() .ifPresent(matcher -> System.out.println(matcher.group(1)));
也就是说,对于每个字符串的匹配器,获取第一个匹配的字符串,对于该匹配器,将输出第一组。