Многие из приведенных ответов дают сбой на одном или нескольких из:
- Узоры произвольной длины
- Перекрывающиеся совпадения (например, подсчет "232" в "23232" или "aa" в "aaa")
- метасимволы регулярного выражения
Вот что я написал:
static int countMatches(Pattern pattern, String string)
{
Matcher matcher = pattern.matcher(string);
int count = 0;
int pos = 0;
while (matcher.find(pos))
{
count++;
pos = matcher.start() + 1;
}
return count;
}
Пример вызова:
Pattern pattern = Pattern.compile("232");
int count = countMatches(pattern, "23232"); // Returns 2
Если вам нужен поиск без регулярных выражений, просто скомпилируйте ваш шаблон соответствующим образом с флагом LITERAL
:
Pattern pattern = Pattern.compile("1+1", Pattern.LITERAL);
int count = countMatches(pattern, "1+1+1"); // Returns 2