String.replaceAll() 不适用于某些文件和字符串

String.replaceAll() doesn't work on some files and strings

这是代码:

public static void update(String stringOld, String stringNew, String strPath) {
    Path path = Paths.get(strPath);
    Charset charset = StandardCharsets.UTF_8;
    try {
        String content = new String(Files.readAllBytes(path), charset);
        content = content.replaceAll(stringOld, stringNew);
        Files.write(path, content.getBytes(charset));
    } catch (IOException e) {
        System.out.println("\n\nERRORE: " + e.getMessage() + "\n");
    }
}

stringOld:

IDX=8, Tipo=Auto, Marca= , Modello= , Versione= , Anno=2002, Potenza(CV)=200, Cambio=Manuale, Carburante=Benzina, Posti=20, Porte=5, Colore=gkgdl, Condizione=Nuovo, Prezzo=4500;

stringNew:

IDX=8, Tipo=Auto, Marca=Maserati, Modello=Levante, Versione=Gransport, Anno=2020, Potenza(CV)=250, Cambio=Automatico, Carburante=Diesel, Posti=5, Porte=5, Colore=Bianca, Condizione=KM0, Prezzo=75000;

输出:

...; 
IDX=8, Tipo=Auto, Marca= , Modello= , Versione= , Anno=2002, Potenza(CV)=200, Cambio=Manuale, Carburante=Benzina, Posti=20, Porte=5, Colore=gkgdl, Condizione=Nuovo, Prezzo=4500;
...;

字符串 stringOld 与文件中的一行匹配,但未替换为 stringNew。如果我对另一个字符串和另一个文件使用相同的方法,它工作正常

'oldString' 中的括号是用于分组的正则表达式中的特殊字符。所以不匹配。

您可以通过粘贴文本和正则表达式 here 或其他在线工具进行测试。

您实际上应该通过在括号前面添加反斜杠来转义括号。 => Potenza\(CV\)=200

如果您想使用字符串而不是正则表达式作为源,请使用:

String.replace(CharSequence,CharSequence)