请考虑以下代码:
String str = "folder1;b";
String replacement = "C:\\myfolder";
System.out.println(str.replaceAll("b", replacement));
这会打印C:myfolder
。
如何用替换字符串替换str? (没有删除斜线)
我已尝试Pattern.quote(replacement)
,但会打印\QC:\Development\E
我无法控制来自外部来源的替代品,而且不知道它的内容是什么。
答案 0 :(得分:4)
如果您不使用正则表达式,最好使用String.replace()
:
String str = "folder1;b";
String replacement = "C:\\myfolder";
System.out.println(str.replace("b", replacement));
String.replace()
执行文字替换,它不会将参数视为正则表达式。
我会指出,如果str
为folder1;bash;b
,您将遇到麻烦,因为b
将被替换。
答案 1 :(得分:0)
String.replaceAll
的第二个参数需要正则表达式。在正则表达式世界中,\
具有特殊的运算符含义。你必须为jvm和一次regex逃脱它。
String str = "b";
String replacement = "C:\\\\\\\\myfolder";
System.out.println(str.replaceAll(str, replacement));
将打印出来
C:\\myfolder
使用String.replace
它确实需要文字字符串,因此你只需要为jvm转义一次
String str = "b";
String replacement = "C:\\\\myfolder";
System.out.println(str.replace(str, replacement));
将打印
C:\\myfolder
最后,如果你不知道传入的替换字符串是什么样的,你可以事先用
来逃避它。 String str = "b";
String replacement = "C:\\myfolder"; // might be anything
String actualReplacement = replacement.replaceAll("\\\\", "\\\\\\\\");
System.out.println(str.replace(str, actualReplacement));
将打印
C:\\myfolder
除此之外,您可以使用其中一个apache.utils来实现它,但这里没有任何第三方库。
答案 2 :(得分:0)
String.replaceAll使用正则表达式。你不需要那个。
试试这个:
String str = "b";
String replacement = "C:\\myfolder";
System.out.println(str.replace(str,replacement);