我试图用简单的Java 8 lambdas/stream解决方案来计算正则表达式模式的匹配数.例如,对于此模式/匹配器:
final Pattern pattern = Pattern.compile("\\d+"); final Matcher matcher = pattern.matcher("1,2,3,4");
有一种方法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();
我也试过(ab)使用IntStream
.问题是我必须猜测应该调用多少次matcher.find()
而不是直到它返回false.
final long count = IntStream .iterate(0, i -> matcher.find() ? 1 : 0) .limit(100) .sum();
我所熟悉的传统的解决方案while (matcher.find()) count++;
,其中count
是可变的.使用Java 8 lambdas/streams有一种简单的方法吗?