为什么我不能替换“:)”

时间:2014-01-12 14:55:41

标签: java regex string

我似乎无法将“:)”替换为其他内容,这是我的代码:

if(message.contains(":)")) message = message.replaceAll(":)", replacement);

这是错误:

Exception in thread "Listen" java.util.regex.PatternSyntaxException: Unmatched closing ')'
near index 0
:)
^

我该怎么办?

3 个答案:

答案 0 :(得分:8)

不要使用replaceAll();如果要替换文字字符串,请使用replace()

message.replace(":)", replacement)

replaceAll()处理regular expressions,其中)具有特殊含义,因此错误。

答案 1 :(得分:2)

你必须在regexen中逃避)

message = message.replaceAll(":\\)", replacement);

这是因为)具有特殊含义(捕获组),因此您必须“告诉”正则表达式,您只需要文字)

答案 2 :(得分:1)

写:

message.replaceAll(Pattern.quote(":)"), replacement);

String#replaceAll接受正则表达式,而不是常规字符串。 )在正则表达式中具有特殊含义,使用quote会导致将:)视为字符串:),而不是正则表达式。

如果您不想使用Pattern#quote,则应逃避 ) \\。请注意,转义正则表达式是由\完成的,但在Java中,\写为\\

如果您不喜欢上述任何内容,请使用不接受正则表达式的String#replace,并且您没事。