Man*_*dis 7 java regex java-8 java-stream
我试图用简单的Java 8 lambdas/stream解决方案来计算正则表达式模式的匹配数.例如,对于此模式/匹配器:
final Pattern pattern = Pattern.compile("\\d+");
final Matcher matcher = pattern.matcher("1,2,3,4");
Run Code Online (Sandbox Code Playgroud)
有一种方法splitAsStream可以在给定模式上分割文本而不是匹配模式.虽然它很优雅并且保留了不变性,但它并不总是正确的:
// count is 4, correct
final long count = pattern.splitAsStream("1,2,3,4").count();
// count is 0, wrong
final long count = pattern.splitAsStream("1").count();
Run Code Online (Sandbox Code Playgroud)
我也试过(ab)使用IntStream.问题是我必须猜测应该调用多少次matcher.find()而不是直到它返回false.
final long count = IntStream
.iterate(0, i -> matcher.find() ? 1 : 0)
.limit(100)
.sum();
Run Code Online (Sandbox Code Playgroud)
我所熟悉的传统的解决方案while (matcher.find()) count++;,其中count是可变的.使用Java 8 lambdas/streams有一种简单的方法吗?
要Pattern::splitAsStream正确使用,您必须反转您的正则表达式。这意味着\\d+您应该使用\\D+. 这将为您提供字符串中的所有数字。
final Pattern pattern = Pattern.compile("\\D+");
// count is 4
long count = pattern.splitAsStream("1,2,3,4").count();
// count is 1
count = pattern.splitAsStream("1").count();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4034 次 |
| 最近记录: |