Почему программа считает 89 раз вместо 22

public class Main {
    public static final String TEXT = "aaababaabaaaabaabaabaabaaababaabaaababaabaaaabaabaabaabbabaabaaababaababaabaabaabaaabbaab";
    public static final String PATTERN = "aab";

    public static void main(String[] args) {
        int count = 0;

        for (int i = 0; i < TEXT.length(); i++) {
            if (TEXT.charAt(i) == PATTERN.length()) {
            }
            count++;
        }
        System.out.println("Строка " + PATTERN + " встретилась в тексте " + count + " раз");
    }
}

Ответы (1 шт):

Автор решения: Nowhere Man

Следует искать индекс вхождения строки при помощи String::indexOf(String sub, int from):

int count = 0;

int pos = 0;
while ((pos = TEXT.indexOf(PATTERN, pos)) != -1) {
    count++;
    pos += PATTERN.length();
}

System.out.println("Строка " + PATTERN + " встретилась в тексте " + count + " раз");

Однако, даже в таком случае будет найдено 22 вхождения.


Аналогично, можно построить регулярное выражение из шаблона PATTERN и подсчитать число совпадений:

System.out.println("Строка " + PATTERN + " встретилась в тексте " +
        Pattern.compile(Pattern.quote(PATTERN))
                .matcher(TEXT).results().count() 
        + " раз"
);

В обоих случаях будет напечатано:

Строка aab встретилась в тексте 22 раз
→ Ссылка