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)
这是代码:
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)