Подсчёт повторений букв
Написал программу подсчёта повторений буквосочетний. Программа считает, но больше, чем надо - 148. Правильный ответ 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++) {
char ch = TEXT.charAt(i);
for (int a = 0; a < PATTERN.length(); a++) {
char c1 = PATTERN.charAt(a);
if (ch == c1) {
count++;
}
}
}
System.out.println("Строка " + PATTERN + " встретилась в тексте " + count + " раз");
}
}
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Можно/проще использовать String::indexOf(String substr, int fromIndex):
public static int count(String text, String sub) {
int count = 0;
int pos = 0;
while ((pos = text.indexOf(sub, pos)) != -1) {
count++;
pos += sub.length();
}
return count;
}
public static final String TEXT = "aaababaabaaaabaabaabaabaaababaabaaababaabaaaabaabaabaabbabaabaaababaababaabaabaabaaabbaab";
public static final String PATTERN = "aab";
System.out.println(count(TEXT, PATTERN)); // -> 22
Аналогично, можно построить регулярное выражение при помощи Pattern.compile/Pattern.quote и посчитать количество совпадений:
import static java.util.regex.Pattern.*;
// ...
public static int countRegex(String text, String sub) {
return (int) compile(quote(sub)).matcher(text).results().count();
}