Необходимо найти все позиции вхождения шаблона в строке. Шаблон выглядит как: "a?b", где '?' означает любой символ.
Пытаюсь заменить '?' на '.' и воспользоваться поиском первого вхождения регулярного выражения в строке indexOf, но вхождения почему-то не обнаружены:
str = scan.nextLine();
shablon = scan.nextLine();
int j = -1;
String p = shablon.replace('?', '.');
for (int i = 0; i < str.length(); i++) {
j = str.indexOf(p, i);
if (j >= 0) {
System.out.print(j + " ");
}
}
Input
abacaba
a?a
Output (ожидаемый)
1 3 5
Реальный выход - пустая строка (потому что все значения функции равны -1)
Что я делаю не так?
Для решения задачи следуйте алгоритму:
(?=...)
в случае из вопроса регулярное выражение будет выглядеть так: (?=a.?a)
Полученный результат будет показывать позицию вхождения шаблона с учетом того, что вхождения могут перекрывать друг друга.
Вы ищете подстроку в строке. Эта функция .indexOf
не работает в регулярками., то бишь на входе строка.
String STR = "abacaba";
String PATTERN = "(a.?a)";
Pattern P = Pattern.compile(PATTERN);
Matcher M = P.matcher(STR);
while (M.find()) {
System.out.println(M.group(1));
System.out.println(M.start() + " - " + (M.end()-1));
}
Результат:
aba
0 - 2
aba
4 - 6
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Господа, читаю документацию, вроде все понятно и проще пареной перы