如何完全按照原样替换字符串?

时间:2017-01-18 15:19:26

标签: java

请考虑以下代码:

String str = "folder1;b";
String replacement = "C:\\myfolder";
System.out.println(str.replaceAll("b", replacement));

这会打印C:myfolder
如何用替换字符串替换str? (没有删除斜线)
我已尝试Pattern.quote(replacement),但会打印\QC:\Development\E

我无法控制来自外部来源的替代品,而且不知道它的内容是什么。

3 个答案:

答案 0 :(得分:4)

如果您不使用正则表达式,最好使用String.replace()

String str = "folder1;b";
String replacement = "C:\\myfolder";
System.out.println(str.replace("b", replacement));

String.replace()执行文字替换,它不会将参数视为正则表达式。

我会指出,如果strfolder1;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);