Замена нескольких подстрок в Java, когда замещающий текст перекрывает текст поиска
Скажем, у вас есть следующая строка:
cat dog fish dog fish cat
Вы хотите заменить всеcats
с участиемdogs
, всеdogs
с участиемfish
, и всеfish
с участиемcats
, Интуитивно, ожидаемый результат:
dog fish cat fish cat dog
Если вы попробуете очевидное решение, переберитеreplaceAll()
, ты получаешь:
cat dog fish dog fish cat
(кошка -> собака)dog dog fish dog fish dog
(собака -> рыба)fish fish fish fish fish fish
(рыба -> кошка)cat cat cat cat cat cat
Понятно, что это не намеченный результат. Так каков самый простой способ сделать это? Я могу сделать что-то вместеPattern
а такжеMatcher
(и многоPattern.quote()
а такжеMatcher.quoteReplacement()
), но я отказываюсь верить, что я первый, у кого возникла эта проблема, и нет библиотечной функции для ее решения.
(FWIW, фактический случай немного более сложен и не вовлекает прямые обмены.)