我试图替换文件中的某些文本,而字符串包含一个需要反斜杠的文件路径,通常使用" \"工作正常并在输出上产生一个\但我当前的代码没有输出任何反斜杠
String newConfig = readOld().replaceAll(readOld(),"[HKEY_CURRENT_USER\\Software\\xxxx\\xxxx\\Config]");
答案 0 :(得分:2)
"\"
开始escape sequence,
以反斜杠(\)开头的字符是转义序列,对编译器有特殊意义。
所以,(或许可笑)
String old = readOld();
String newConfig = old.replaceAll(old,
"[HKEY_CURRENT_USER\\\\Software\\\\xxxx\\\\xxxx\\\\Config]");
或者,
String old = readOld();
char backSlash = '\\';
String newConfig = old.replaceAll(old,
"[HKEY_CURRENT_USER" + backSlash + backSlash + "Software"
+ backSlash + backSlash + "xxxx"
+ backSlash + backSlash + "xxxx"
+ backSlash + backSlash + "Config]");
答案 1 :(得分:1)
您应该在这里使用replace
,因为您的readOld()
方法可能会有+,*,. etc.
中保留的某些特殊字符(即regExp
),因此最好使用replace
。(由于replaceAll
可能会因无效的正则表达式而抛出Exception
String newConfig = readOld().replace(readOld(),"replacement");
此处似乎您正在替换整个String
,为什么不直接将String
分配给newConfig
来自JavaDoc for replaceAll
替换中的反斜杠
(\)
和美元符号($)
字符串可能会导致结果与正确的结果不同 被视为文字替换字符串
因此,请转到\\\\
中的Elliott Frinch
(由String
建议)或使用replace
。