Существуют некоторые алгоритмы поиска строк, которые позволяют вам попытаться найти в строке длиной n k строк одновременно дешевле, чем очевидная стоимость O (n * k).
Они обычно сравнивают переходхэш против списка существующих хэшей ваших слов.Ярким примером этого может служить алгоритм Рабина-Карпа .На вики-странице даже есть раздел об этом.Существуют и более продвинутые версии этого принципа, но его легко понять.
Не знаю, есть ли уже библиотеки на Java, которые делают это (я так думаю), но вот чтоЯ бы попробовал - хотя 5 строк здесь довольно малы (а разный размер тоже усложняет).Поэтому лучше проверить, не является ли хороший поиск строки KMP не быстрым - я думаю, что это действительно лучшее решение (по умолчанию Java-API использует поиск по наивной строке, поэтому используйте lib)
О ваших регулярных выражениях: откатить реализацию регулярных выражений для критичного к производительности поискового кода?Я сомневаюсь, что это хорошая идея.
PS: Если вы опубликуете набор тестов и комплект тестов для вашей проблемы, есть вероятность, что хорошие люди увидят, как сильно они могут победить любимого - сработало раньше ... человекс природой так легко обмануть :)