为什么代字号和插入字符不能替换为java replaceAll

时间:2013-10-16 11:57:51

标签: java string

在java中,我的字符串引用变量包含以下值

String str=".NET CLR Memory~^1~^";

现在我要从中删除〜^ 1~ ^。我使用replaceAll方法如下

String str2=str.replaceAll("~^1~^","");

但是str2仍然包含〜^ 1~ ^

任何机构都可以解释为什么会这样以及如何删除它。

4 个答案:

答案 0 :(得分:7)

请注意,String#replaceAll采用正则表达式而不是字符串。解决方案:

  1. 你应该逃避meta-characters。执行此操作时,String将被视为字符串而不是正则表达式。

    通过在正则表达式之前编写\来完成转义字符,但在Java中,\表示为\\,因此您应该写:

    String str2=str.replaceAll("~\\^1~\\^","");

  2. 另一种解决方案是使用带有字符串的replace(),你会没事的。

  3. 上一个解决方案是使用Pattern#quote获取正则表达式并将其用作字符串。

    String str2=str.replaceAll(Pattern.quote("~^1~^"),"");

答案 1 :(得分:3)

使用replace(),而不是replaceAll()

replaceAll()使用正则表达式作为其目标,并且您的搜索字词无法匹配正则表达式。
replace()替换(所有出现的)纯文本。

这样做:

String str2 = str.replace("~^1~^","");

答案 2 :(得分:1)

你可以试试这个。

String str=".NET CLR Memory~^1~^";
String str2=str.replaceAll("~\\^1~\\^","");
System.out.println(str2);

答案 3 :(得分:1)

这对你有用。 ~^1~^不是字符串。

System.out.println(".NET CLR Memory~^1~^".replace("~^1~^",""));

或者

System.out.println(".NET CLR Memory~^1~^".replaceAll("\\~\\^1\\~\\^",""));