нахождение числа встречаемости подстроки в строке

#java

Вопрос:

Я хотел найти количество встречаемости подстроки в строке, которую я реализовал в следующем коде на java:

 Pattern mypattern=Pattern.compile("a");
Matcher mymatcher=mypattern.compile("aaaaaa");
int cnt=0;
while(mymatcher.find()){
    cnt  ;
)
System.out.println(cnt);
 

Но это не работает, когда я хочу, чтобы функция считала также пересекающиеся строки, например, я хочу, чтобы ответ на поиск aa в aaaaaa был 5, но вышеприведенная программа покажет его 3.Как я могу это сделать?

Комментарии:

1. Возможно, вам следует найти первое вхождение, а затем начать поиск следующего вхождения с 1 символа после. например, если вы сначала найдете строку с индексом 10, начните следующий поиск с 11

2. Пожалуйста, опубликуйте код, который вы на самом деле используете. Этот опубликованный код не соответствует описанию и не компилируется.

3. Почему вы хотите 5 в качестве ответа при проверке, как часто aaaaaa содержится a ? Я насчитал 6 случаев, и это также то, что ваш код даст в качестве ответа (как только я изменюсь mypattern.compile mypattern.matcher , чтобы действительно иметь возможность запускать код)

4. @OHGODSPIDERS Это то, что я имел в виду, когда код не соответствовал описанию, потому что ОП говорил об «аа», а не о «а», как в коде.

5. @OHGODSPIDERS OP означало «найти aa в aaaaaa возвратах 5″.

Ответ №1:

Положительный внешний (?=(aa)) вид может использоваться в регулярном выражении для обработки перекрывающихся совпадений:

 System.out.println(Pattern.compile("(?=(aa))").matcher("aaaaaa").results().count());

// 5
 

Ответ №2:

Этот код даст вам желаемое количество 5, если вы ищете случаи aa в aaaaaa.

 Pattern mypattern = Pattern.compile("aa");
Matcher mymatcher = mypattern.matcher("aaaaaa");
int cnt = 0;
int start = 0;
while (mymatcher.find(start)) {
    start = mymatcher.start()   1;
    cnt  ;
}
System.out.println(cnt);
 

Ответ №3:

Вы можете использовать библиотеку Apache Commons Lang:

 System.out.println(StringUtils.countMatches(str, subStr));
 

Комментарии:

1. Вы имеете в виду этот язык Apache Commons ?

2. Да, просто импортируйте класс StringUtils: импортируйте org.apache.commons.lang3.StringUtils;