имам следния код
Pattern keyPattern = Pattern.compile(key);
Matcher matcher = keyPattern.matcher(str);
return matcher.replaceAll(value);
това ще замени ключа в str със стойност; но аз искам да знам колко екземпляра на ключ е заменен с стойност. така как да знаете това?
Отговори:
2 за отговор № 1Можете да използвате метода find в цикъл, за да преброите. Има пример в Java настойнически:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class MatcherDemo {
private static final String REGEX = "\bdog\b";
private static final String INPUT = "dog dog dog doggie dogg";
public static void main(String[] args) {
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(INPUT); // get a matcher object
int count = 0;
while(m.find()) {
count++;
System.out.println("Match number "+count);
System.out.println("start(): "+m.start());
System.out.println("end(): "+m.end());
}
}
}
Докато извиквате find, можете в същото време да съберете частите на низа и ръчно да създадете резултата в a StringBuffer, Или ако производителността не е проблем, първо можете да преброите и след това отново да сканирате низ със заместител.
1 за отговор № 2
вместо това можете да направите:
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++;
}