Java 为什么可以';t我将替换为“:)&引用;

Java 为什么可以';t我将替换为“:)&引用;,java,regex,string,Java,Regex,String,我似乎无法将字符串“:”替换为其他内容,以下是我的代码: if(message.contains(":)")) message = message.replaceAll(":)", replacement); 这就是错误: Exception in thread "Listen" java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 0 :) ^ 我该怎么办?写: message.replaceAll

我似乎无法将字符串“:”替换为其他内容,以下是我的代码:

if(message.contains(":)")) message = message.replaceAll(":)", replacement);
这就是错误:

Exception in thread "Listen" java.util.regex.PatternSyntaxException: Unmatched closing ')'
near index 0
:)
^
我该怎么办?

写:

message.replaceAll(Pattern.quote(":)"), replacement);
接受正则表达式,而不是常规字符串
在正则表达式中有特殊含义,使用将导致将
:)
视为字符串
:)
而不是正则表达式

如果您不想使用,则应通过
\\
退出
。请注意,转义正则表达式是由
\
完成的,但在Java中,
\
被写成
\

如果您不喜欢上面提到的任何一个,请使用不接受正则表达式的,这样您就可以了。

写:

message.replaceAll(Pattern.quote(":)"), replacement);
接受正则表达式,而不是常规字符串
在正则表达式中有特殊含义,使用将导致将
:)
视为字符串
:)
而不是正则表达式

如果您不想使用,则应通过
\\
退出
。请注意,转义正则表达式是由
\
完成的,但在Java中,
\
被写成
\

如果您不喜欢上面提到的任何一个,请使用不接受正则表达式的,您就可以了。

不要使用
replaceAll()
;要替换文字字符串时使用:

message.replace(":)", replacement)
replaceAll()
处理,其中
具有特殊含义,因此出现错误。

不要使用
replaceAll()
;要替换文字字符串时使用:

message.replace(":)", replacement)
replaceAll()
处理,其中
具有特殊含义,因此出现错误。

您必须在regexen中转义

message = message.replaceAll(":\\)", replacement);
这是因为
具有特殊意义(捕获组),因此您必须“告诉”regex您只需要一个文本

您必须在regexen中转义

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


这是因为
具有特殊的含义(捕获组),所以您必须“告诉”regex您只需要一个文本

@arshajii修复。谢谢,上帝。。。。给某人纠正错误的机会………@DoorknobofSnow在引用方法/属性(通常在文档中)时,使用
来分隔类名和方法/属性名是一种常见的方法。@ajp15243我知道,但在编辑之前是
消息。replaceAll(模式#quote(:)”,replacement)(现已修复)@DoorknobofSnow啊,我明白了,这个问题经过了太多的编辑,我没听清那个lol。@arshajii已修复。谢谢,上帝。。。。给某人纠正错误的机会………@DoorknobofSnow在引用方法/属性(通常在文档中)时,使用
来分隔类名和方法/属性名是一种常见的方法。@ajp15243我知道,但在编辑之前是
消息。replaceAll(模式#quote(:)”,replacement)(现已修复)@DoorknobofSnow啊,我明白了,这个问题经过了太多的编辑,我都没听清楚。我讨厌ppl这样做,尤其是当他们错了的时候,我会毫不评论地投反对票!为什么会有人否决这个?非常感谢,这很有效@很高兴我能帮上忙。别忘了。顺便说一句,
replace()
函数是由模式类支持的,而不是一个普通的循环追加。+1我讨厌ppl这样做,尤其是当它们出错时,没有注释的向下投票!为什么会有人否决这个?非常感谢,这很有效@很高兴我能帮上忙。别忘了。顺便说一句,
replace()
函数由模式类支持,而不是普通的循环追加。