基本上我使用以下代码
message.replaceFirst(cmd, "");
这很好,但有时cmd的值是“\”,这会导致问题,因为它试图将其作为正则表达式读取并给出以下错误
Caused by: java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
at java.util.regex.Pattern.error(Unknown Source) ~[?:1.7.0_45]
at java.util.regex.Pattern.compile(Unknown Source) ~[?:1.7.0_45]
at java.util.regex.Pattern.<init>(Unknown Source) ~[?:1.7.0_45]
at java.util.regex.Pattern.compile(Unknown Source) ~[?:1.7.0_45]
at java.lang.String.replaceFirst(Unknown Source) ~[?:1.7.0_45]
基本上我想知道是否有办法让它读取这个AS而不试图将它用作Regex。
提前致谢
答案 0 :(得分:3)
您必须使用Pattern#quote,因为\
是RegEx中的特殊字符。
message.replaceFirst(Pattern.quote(cmd), "");
您也可以在替换字符串中遇到相同类型的问题,在这种情况下使用Matcher#quoteReplacement。
答案 1 :(得分:2)
对于原样,请使用:
String str = Pattern.compile(cmd, Pattern.LITERAL)
.matcher(message)
.replaceFirst("");