2012-11-07 31 views
0

可能重复全部替换:
java String.replaceAll without regex具有正则表达式野生字符的字符串

我有一个字符串,我需要更换它的某些部分。
尽管替换文本包含正则表达式通配符。例如:

String target = "Something * to do in ('AAA', 'BBB')";  
String replacement = "Hello";  
String originalText = "ABCDEFHGIJKLMN" + target + "ABCDEFHGIJKLMN"; 
System.out.println(originalText.replaceAll(target, replacement));  

我得到:
ABCDEFHGIJKLMNSomething * to do in ('AAA', 'BBB')ABCDEFHGIJKLMN

为什么不更换会出现?

回答

3

因为*,()是正则表达式中的所有元字符。因此,他们都需要逃脱。它看起来像Java有一个非常方便的方法:

java.util.regex.Pattern.quote(target) 

然而,更好的选择是,只是不使用使用正则表达式,replaceAll功能but simply replace。那么你不需要逃避任何事情。

+0

使用'quote'我得到:'ABCDEFHGIJKLMN \ QHello \ EABCDEFHGIJKLMN'。我怎样才能摆脱'Q'? – Jim

+0

@Jim ..不,你不应该那样做。它应该工作正常。你是如何使用它的? –

+0

我做了:'target = Pattern.quote(target); target = Pattern.quote(target); 字符串替换=“你好”; String originalText =“ABCDEFHGIJKLMN”+ target +“ABCDEFHGIJKLMN”; System.out.println(originalText.replaceAll(target,replacement));' – Jim

2

String.replaceAll()需要一个正则表达式,所以它试图展开这些元字符。

一种方法是对转义这些字符(例如\*)。

另一种方法是通过使用String.indexOf()并自己找到所包含字符串的开头,自己进行替换。 indexOf()不采用正则表达式,而是采用正常字符串。