2009-03-04 88 views

回答

74

你需要躲避+正则表达式,使用\

但是,Java使用String参数来构造正则表达式,它使用\作为自己的转义序列。所以,你必须逃离\本身:

"\\+" 
+1

我有坏习惯在构建正则表达式然后运行.replace('/','\\')时使用'/',这样我就不必输入“\\\\”以匹配文字反斜杠。 – 2009-03-04 12:49:49

+2

如果你想替换一个固定的字符串,Pattern.quote(String)是一个非常好的朋友。 – gustafc 2009-03-04 13:06:23

13

您需要用\转义+,因为\本身就是Java字符串中的一个特殊字符,您需要用另一个\来转义它。

因此,您的正则表达式字符串将在Java代码中定义为“\\ +”。

I.e.下面这个例子:

String test = "ABCD+EFGH"; 
test = test.replaceAll("\\+", "-"); 
System.out.println(test); 
29

有疑问时,让Java的为你做的工作:

myStr.replaceAll(Pattern.quote("+"), replaceStr); 
+0

这是一个很好的技术 - 谢谢。 – 2009-03-04 16:50:50

+0

这还不够。 replaceStr也需要引用替换的东西。为什么不使用`myStr。替换(“+”,replaceStr)` – user102008 2011-06-20 09:41:27

3

如果你想要一个简单的字符串查找和替换(即你不“T需要正则表达式),它可能是简单的使用StringUtils from Apache Commons,这样可以让你写:

mystr = StringUtils.replace(mystr, "+", "plus"); 
1

其他人已经指出的正确方法:

  1. 摆脱+作为\\+
  2. 使用Pattern.quote方法,其逸出所有正则表达式元字符。

另一种可以使用的方法是将+放在字符类中。许多正则表达式元字符(.,*,+以及其他许多字符)在字符类中被逐字处理。

所以,你也可以这样做:

orgStr.replaceAll("[+]",replaceStr); 

Ideone Link

2

说你想用\\\-更换-,用途:

text.replaceAll("-", "\\\\\\\\-"); 
1
String str="Hello+Hello"; 
str=str.replaceAll("\\+","-"); 
System.out.println(str); 

OR

String str="Hello+Hello"; 
str=str.replace(Pattern.quote(str),"_"); 
System.out.println(str); 
相关问题