Вхождение выражения в строку

192
26 сентября 2017, 05:16

Необходимо найти все позиции вхождения шаблона в строке. Шаблон выглядит как: "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)

Что я делаю не так?

Answer 1

Для решения задачи следуйте алгоритму:

  1. Преобразуйте Ваш шаблон в эквивалентное регулярное выражение
  2. Если шаблон будет вводить пользователь, то не забывайте про экранирование мета-символов регулярных выражений
  3. Полученное регулярное выражение поместите внутри конструкции (?=...) в случае из вопроса регулярное выражение будет выглядеть так: (?=a.?a)

Полученный результат будет показывать позицию вхождения шаблона с учетом того, что вхождения могут перекрывать друг друга.

Answer 2

Вы ищете подстроку в строке. Эта функция .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
READ ALSO
Создание своих исключений Spring

Создание своих исключений Spring

Есть стандартное исключение в Spring - DuplicateKeyException

173
Изменение курсора мыши cursor:(путь к иконе), pointer;

Изменение курсора мыши cursor:(путь к иконе), pointer;

Господа, читаю документацию, вроде все понятно и проще пареной перы

325
Расположение фигуры на одной строке с текстом

Расположение фигуры на одной строке с текстом

Как поставить квадрат на одной линией с текстом?

340
Как расположить гугл карту на сайт?

Как расположить гугл карту на сайт?

Вот есть карта https://drivegoogle

284