Je voudrais remplacer toutes les instances d'une sous-chaîne dans une chaîne mais String.replaceAll()
n'accepte qu'un modèle. La chaîne que j'ai issue d'un match précédent. Est-il possible d'ajouter des échappements au modèle que j'ai ou existe-t-il une version de replaceAll()
dans une autre classe qui accepte une chaîne littérale au lieu d'un modèle?
115
Réponses:
Utilisez simplement
String.replace(CharSequence,CharSequence)
plutôt quereplaceAll
.la source
System.out.println("hello world, hello life, hello you".replace("hello","hi"));
revient"hi world, hi life, hi you"
.La méthode pour ajouter des échappements est
Pattern.quote()
.Mais comme Jon le dit, vous pouvez simplement utiliser
replace()
. Malgré le fait qu'il s'écarte dureplaceAll
nom, il remplace toutes les occurrences commereplaceAll()
.la source
Pattern.compile()
compile la chaîne en tant qu'expression régulière, ce qui signifie que les caractères spéciaux auront une signification particulière. C'est tout le contraire de ce quePattern.quote()
fait, et de ce que l'OP demandait (quote()
dit, "traiter la chaîne comme un littéral"). Peut-être pourriez-vous expliquer de quels «résultats indésirables» vous parlez.Matcher.quoteReplacement("$aa +")
.Pattern.compile()
produit unPattern
, pas unString
, donc je ne sais pas comment vous l'utilisezreplaceAll
.