我有一个字符串,我需要更换它的一些部分 替换文本包含regex wild chars。示例:
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
为什么不进行更换?
答案 0 :(得分:3)
由于*
,(
和)
都是正则表达式中的元字符。因此,所有这些都需要逃脱。看起来Java有一个方便的方法:
java.util.regex.Pattern.quote(target)
但是,更好的选择可能是,不使用正则表达式使用replaceAll
函数but simply replace
。然后你不需要逃避任何事情。
答案 1 :(得分:2)
String.replaceAll()
采用正则表达式,因此它正在尝试扩展这些元字符。
一种方法是转义这些字符(例如\*
)。
另一种方法是使用String.indexOf()并找到包含字符串的开头来自行替换。 indexOf()
不使用正则表达式,而是采用普通字符串。