如果我在java中使用模式和匹配器,如何找到匹配数?
我有以下代码如果我在java中使用模式和匹配器,如何找到匹配数?,java,Java,我有以下代码 Pattern keyPattern = Pattern.compile(key); Matcher matcher = keyPattern.matcher(str); return matcher.replaceAll(value); 这将用value替换str中的键; 但我想知道有多少key的实例被value替换了。 那么如何知道呢?您可以在循环中使用find方法进行计数。下面是一个例子: 在调用find时,您可以同时收集字符串的各个部分,并在一个函
Pattern keyPattern = Pattern.compile(key);
Matcher matcher = keyPattern.matcher(str);
return matcher.replaceAll(value);
这将用value替换str中的键;
但我想知道有多少key的实例被value替换了。
那么如何知道呢?您可以在循环中使用find方法进行计数。下面是一个例子: 在调用find时,您可以同时收集字符串的各个部分,并在一个函数中手动生成结果。或者,如果性能不是问题,您可以先计数,然后使用replaceAll再次扫描字符串。相反,您可以执行以下操作:
int num = 0;
Pattern keyPattern = Pattern.compile(key);
Matcher matcher = keyPattern.matcher(str);
while(matcher.find()){
str = matcher.replaceFirst();
matcher = keyPattern.matcher(str); //don't know if this line is necessary
num++;
}
以上答案可能更好。同意。首先,您的解决方案每次都必须从头开始重新扫描。其次,如果(例如)替换字符串包含与键模式匹配的内容,它将给出错误的答案;从while循环,它应该可以工作,对吗?没有循环,我可以一次找到。因为它可能会降低性能。即使有一个函数可以在不循环的情况下调用,但在内部它仍然会有一个循环,所以我认为性能不会有显著的提高。我在上面概述的第一种方法应该可以提供良好的性能,因为字符串只扫描一次。
int num = 0;
Pattern keyPattern = Pattern.compile(key);
Matcher matcher = keyPattern.matcher(str);
while(matcher.find()){
str = matcher.replaceFirst();
matcher = keyPattern.matcher(str); //don't know if this line is necessary
num++;
}