Reemplazar múltiples subcadenas en Java cuando el texto de reemplazo se superpone al texto de búsqueda
Di que tienes la siguiente cadena:
cat dog fish dog fish cat
Quieres reemplazar todoscats
condogs
, todosdogs
confish
, y todofish
concats
. Intuitivamente, el resultado esperado:
dog fish cat fish cat dog
Si prueba la solución obvia, realice un bucle conreplaceAll()
, usted obtiene
cat dog fish dog fish cat
(gato -> perro)dog dog fish dog fish dog
(perro -> pescado)fish fish fish fish fish fish
(pez -> gato)cat cat cat cat cat cat
Claramente, este no es el resultado deseado. Entonces, ¿cuál es la forma más sencilla de hacer esto? Puedo improvisar algo junto conPattern
yMatcher
(y un montón dePattern.quote()
yMatcher.quoteReplacement()
), pero me niego a creer que soy la primera persona en tener este problema y no hay una función de biblioteca para resolverlo.
(FWIW, el caso real es un poco más complicado y no implica intercambios directos).