Ho avuto lo stesso problema, quindi finisco per implementare la sostituzione di tutto con split.
ha risolto l'eccezione per me
public static String replaceAll(String source, String key, String value){
String[] split = source.split(Pattern.quote(key));
StringBuilder builder = new StringBuilder();
builder.append(split[0]);
for (int i = 1; i < split.length; i++) {
builder.append(value);
builder.append(split[i]);
}
while (source.endsWith(key)) {
builder.append(value);
source = source.substring(0, source.length() - key.length());
}
return builder.toString();
}
fonte
2017-01-12 18:51:46
Puoi anche spiegarmi perché java sta trattando il secondo parametro come regex anziché come stringa normale? – FranXho
Non lo tratta come un'espressione regolare. Dalla documentazione di Matcher.appendReplacement, "La stringa di sostituzione può contenere riferimenti a sottosequenze acquisite durante la corrispondenza precedente: Ogni occorrenza di $ {nome} o $ g sarà sostituita dal risultato della valutazione del gruppo corrispondente (nome) o gruppo (g) rispettivamente ... Un simbolo di dollaro ($) può essere incluso come letterale nella stringa di sostituzione precedendolo con una barra rovesciata (\ $). " – user393274