用.replaceAll替换特殊字符

时间:2011-06-16 09:34:16

标签: java string escaping replaceall

您好我想在字符串

中替换以下字符
String a = "20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A";    
System.out.println(a);
String x  = a.replaceAll("~^", "");
System.out.println(x);

但是我的输出是:

20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A
20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A

显然有些事情发生了!

我使用转义字符运行它:

 String x  = fix.replaceAll("\\~^", "\\");

仍然是相同的输出。有什么东西与〜我不知道吗?

我必须这样做:

〜!〜^

〜!

所有在同一个字符串中,我认为3 .replaceAll最长,然后是另外两个。然而,即使是最简单的工作,我也无法做到:S

编辑:由于某种原因被删除了

Edit2:它应该用一个类似于[]

的字符框替换〜^

3 个答案:

答案 0 :(得分:5)

据我所知,你根本不需要正则表达式?

如果不需要正则表达式,您可以使用replace代替replaceAll,这也将替换所有出现但不会将第一个参数解释为正则表达式(请参阅{{3} })

String a = "20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A";    
System.out.println(a);
String x  = a.replace("~^", "");
System.out.println(x);

这将输出:

20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A
20001=EDTS20002=USA20003=117087187520004=120005=0773=665=453=2448=0A

答案 1 :(得分:2)

^匹配输入字符串的开头,因此您的正则表达式~^无法匹配任何内容。您需要将其转义以匹配文字"^"

String x  = a.replaceAll("~\\^", "");

请注意,~不是特殊字符,不需要转义。

或者,如果您想一次性替换~!~!~^~^,请尝试:

String x  = a.replaceAll("~!~\\^|~!|~\\^", ""); 

答案 2 :(得分:1)

正则表达式中的

^表示行的开头,所以我假设java以这种方式解释它,在这种情况下,模式永远不会匹配任何东西。你需要用反斜杠来逃避它,加倍以使它超过java,所以“〜\\ ^”。