我似乎无法将“:)”替换为其他内容,这是我的代码:
if(message.contains(":)")) message = message.replaceAll(":)", replacement);
这是错误:
Exception in thread "Listen" java.util.regex.PatternSyntaxException: Unmatched closing ')'
near index 0
:)
^
我该怎么办?
答案 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
,并且您没事。