2

您好,我想替换字符串中的以下字符

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:它应该用看起来类似于 [] 的字符框替换 ~^

4

3 回答 3

5

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

如果不需要正则表达式,您可以使用replace代替replaceAllwhich 也将替换所有出现但它不会将第一个参数解释为正则表达式(请参阅String.replace

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
于 2011-06-16T09:42:28.857 回答
2

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

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

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

或者,如果您想替换~!~!~^并且~^一口气,请尝试:

String x  = a.replaceAll("~!~\\^|~!|~\\^", ""); 
于 2011-06-16T09:36:23.243 回答
1

正则表达式中的 ^ 表示行首,所以我假设 java 是这样解释的,在这种情况下,模式永远不会匹配任何东西。您需要使用反斜杠对其进行转义,将其翻倍以使其通过 java,因此为“~\\^”。

于 2011-06-16T09:38:48.257 回答