Почему программа считает 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 раз