Substituir várias substrings em Java quando o texto de substituição se sobrepõe à pesquisa de texto
Diga que você tem a seguinte string:
cat dog fish dog fish cat
Você deseja substituir todos oscats
comdogs
, todosdogs
comfish
, e tudofish
comcats
. Intuitivamente, o resultado esperado:
dog fish cat fish cat dog
Se você tentar a solução óbvia, alternando comreplaceAll()
, você obtém:
cat dog fish dog fish cat
(gato -> cachorro)dog dog fish dog fish dog
(cachorro -> peixe)fish fish fish fish fish fish
(peixe -> gato)cat cat cat cat cat cat
Claramente, este não é o resultado pretendido. Então, qual é a maneira mais simples de fazer isso? Posso fazer algo junto comPattern
eMatcher
(e um monte dePattern.quote()
eMatcher.quoteReplacement()
), mas me recuso a acreditar que sou a primeira pessoa a ter esse problema e não há função de biblioteca para resolvê-l
(FWIW, o caso atual é um pouco mais complicado e não envolve trocas diretas.)