Я пытаюсь использовать регулярное выражение (с которого я только начинаю), чтобы найти последовательности с 1 несовпадающим символом.Например, для шаблона «nan» и текста «banana» я бы хотел найти «ban» и «nan», причем первое является приемлемым с несоответствием с «b» и «n».Проблема, с которой я сталкиваюсь, состоит в том, чтобы создать шаблон регулярного выражения, не прибегая к созданию отдельных групповых вставок там, где я хочу.
final String[] patterns = {"[a-z]an", "n[a-z]n", "na[a-z]"};
final String text = "banana";
for(String pattern : patterns)
{
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(text);
while(m.find())
{
System.out.println(m.start() + " " + m.group());
}
}
Это то, что я имею в качестве теста, это своего рода неуклюжий способ получить то, что я хочу (хотя и с некоторыми дубликатами).Для такого рода поиска строк с одним несоответствием является регулярным выражением эффективным средством или я должен попробовать изменить традиционные алгоритмы, такие как Horspool или KMP?