Как найти количество совпадений, если я использую шаблоны и совпадения в Java? - PullRequest
1 голос
/ 11 января 2010

у меня есть следующий код

    Pattern keyPattern = Pattern.compile(key);
    Matcher matcher = keyPattern.matcher(str);
    return matcher.replaceAll(value);

это заменит ключ в str значением; но я хочу знать, сколько экземпляров ключей было заменено значением. так как это узнать?

Ответы [ 2 ]

2 голосов
/ 11 января 2010

Вы можете использовать метод 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 вы можете одновременно собрать части строки и вручную сгенерировать результат в StringBuffer . Или, если производительность не является проблемой, вы можете сначала сосчитать, а затем снова просканировать строку с помощью replaceAll.

1 голос
/ 11 января 2010

вместо этого вы можете сделать:

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++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...