有没有一个衬垫来代替while环?
String formatSpecifier = "%(\\d+\\$)?([-#+ 0,(\\<]*)?(\\d+)?(\\.\\d+)?([tT])?([a-zA-Z%])";
Pattern pattern = Pattern.compile(formatSpecifier);
Matcher matcher = pattern.matcher("hello %s my name is %s");
// CAN BELOW BE REPLACED WITH A ONE LINER?
int counter = 0;
while (matcher.find()) {
counter++;
}
2条答案
按热度按时间8ehkhllq1#
就我个人而言,考虑到原始代码已经很容易理解,我不认为有任何理由将目标放在一个行程序上。不管怎样,如果你坚持的话,有几种方法:
1. 生成助手方法
做这样的东西
所以你的代码
2. java 9
Matcher
在Java9中提供results()
返回一个Stream<MatchResult>
. 所以你的代码变成3. 字符串替换
类似于另一个答案所暗示的。
这里我将替换为空字符(在任何普通字符串中几乎不使用空字符),并通过拆分进行计数:
您的代码变成:
sigwle7e2#
是:用既不在模式中也不在要匹配的字符串中的字符替换任何出现的字符,然后计算此字符出现的次数。这里我选择x,作为简单的例子。您应该使用一个不常用的字符(例如,请参阅utf-8特殊字符)。
在您的示例中,计数器的计算值是2。