Замена нескольких подстрок в 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, фактический случай немного более сложен и не вовлекает прямые обмены.)

Ответы на вопрос(5)

Ваш ответ на вопрос