Вы можете использовать метод 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.