Поиск слова по шаблону из строки в java?(Алгоритм)

Не въезжаю в алгоритм. Есть строка:

String My_String = "Привет, как дела? Что с погодой а-за-за-за?";

Нужен алгоритм поиска (метод java), который бы искал в данной строке слова по шаблону "абв", таким образом он пихал бы в массив MyArray два слова, внимание,

MyArray[0]= "как";

MyArray[1]= "что";

То есть, я думаю так:

  1. Метод должен выглядеть так MySearch(String MyPattern, char[] MyABC){... }. Где MyPattern'ом может быть формула например "абв".Где char MyABC[] - алфавит (набор символов из которых состоит проверяемая MyString)
  2. Если я правильно понял, то все должно сводится к проверке типа "абвбвв" Например, это будет слово "Вереск", т.е. если буква повторяется, то она
    будет такой же, как и по счету в алфавите.
  3. Если я правильно понимаю? то должен быть цикл в цикле, как минимум, но как это работает пока не доходит. Мои попытки не увенчались успехом.
  4. Нужен именно ручной метод, а не встроенный, чтобы его можно было подкорректировать,

Ребят, помогите мне с ручным алгоритмом на java? Только не минусуйте меня, просто скажите в комментах, что не то, я подредактирую.)


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

Автор решения: Стас

Я думаю, вы дошли до того этапа, когда придется учить регулярные выражения :)

Вот несколько полезных ссылок:


Теперь можно и писать код:

public static void main(String[] args)  {
        final String someText = "Привет как дела, что с погодой за-за-за?";

        Pattern regexp = Pattern.compile("\\b[а-я]{3}\\b");

        Matcher match = regexp.matcher(someText);
        while(match.find()) {
            System.out.println(match.group());
        }
}

Вывод:

как
что

Пожалуй, распишу немного подробнее:

  • Создаем объект класса Pattern - это и есть наше регулярное выражение
  • Объект Matcher - это все совпадения по данному выражению
  • while(match.find()) перебирает все результаты и выводит на консоль

И разберем регулярку:

\b[а-я]{3}\b
  • \b - это обозначение границы слова
  • [а-я] - все строчные русские буквы
  • {3} - требуемое количество количество букв

В итоге получаем: подойдут любые слова из строчных русских букв, длиной ровно 3 символа


Нужно чтобы искались слова с Только с первой буквой -Любой- а вторая и третья Любая но не первая, а вторая, иными словами "ABB", например как в слове "Kaa" или "Маа"

Вот такая получилась регулярка:

\b(\p{L})((?!\1)\p{L})\2\b

Разберем подробнее:

  • \p{L} - любой UTF-8 символ
  • (?!\1)\p{L} это отрицательный просмотр назад. Он проверяет, что захват по маске \p{L} не равен захвату предыдущей группы (скобки вокруг первого \p{L} нужны для того, чтобы создать из него группу). Проще говоря, он проверяет, что второй символ не равен первому.
  • ((?!\1)\p{L})\2 соответствует символу, который попал во вторую группу. То есть 2 и 3 символы повторяются.

Вот и получается: строка из 3 символов; первый любой, второй любой, но не равен первому, третий равен второму

→ Ссылка