gpt4 book ai didi

java - 函数式 java.util.regex 匹配/组提取

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:08 26 4
gpt4 key购买 nike

使用 java.util.regex 提取子字符串我发现自己实现了相同的代码模式来解决调用:

Pattern p = Pattern.compile(pattern); // can be static final
Matcher m = p.matcher(input);
if (m.find()) { // or m.matches()
foo(m.group(x));
} else {
...
}

是否有功能扩展或流行的库(guava/apache commons)可以避免丑陋的不必要且容易出错的局部变量,例如:

Pattern p = Pattern.compile(pattern); // can be static final
p.matchedGroup(input, x) // return Optional<String>
.map(group -> foo(group))
.orElse(...);

还有一系列匹配结果,例如:

Pattern p = Pattern.compile(pattern);
p.findMatches(input)
.map((MatchResult mr) -> {
mr.groupsIfPresent(x).map(g -> foo(g)).orElse(...)
})
.findFirst();

似乎 Java8 中唯一的功能添加是 .splitAsStream() 但这仅在尝试拆分匹配项时有用。

最佳答案

以下仅可从获得

您可能正在寻找 Matcher::results产生 Stream<MatchResult>

例如您可以通过以下方式使用它

p.matcher(input)
.results()
.map(MatchResult::group)
.findAny()
.orElse(null);

Holger 添加的内容很有趣,在阅读 File 时并寻找直接使用的模式 Scanner::findAll避免使用 File::lines 将整个文件加载到内存中

关于java - 函数式 java.util.regex 匹配/组提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56511263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com