我正在尝试使用以下代码将[
替换为{
:
String expectedTimeCriteria = "Month Days=" + monthDays.toString().replaceAll("[", "{");
但是会抛出以下错误:
java.util.regex.PatternSyntaxException: Unclosed character class near index 0 [
^
你能帮我理解这里出了什么问题吗?
答案 0 :(得分:2)
String#replaceAll
确实使用了正则表达式,因此在这种情况下,您正在使用正则表达式语法的语义错误。如果您只想将所有[
替换为{
,则可以使用String#replace
方法,该方法不使用正则表达式,并且仍会替换搜索字符串的每个出现位置。
monthDays.toString().replace("[", "{");
答案 1 :(得分:1)
使用replace()
代替replaceAll()
因为replaceAll()
与正则表达式一起使用,[
在正则表达式中具有特殊含义。
replace()
接受一个字符串并执行与replaceAll()
相同的功能。
更正的代码段:
String expectedTimeCriteria = "Month Days=" + monthDays.toString().replace("[", "{");
或者,您可以使用转义字符,如下所示:
String expectedTimeCriteria = "Month Days=" + monthDays.toString().replaceAll("\\[", "{");
答案 2 :(得分:1)
String.replaceAll()
有2个参数,正则表达式和替换字符串。当你传入" ["作为正则表达式,Java尝试将其编译为正则表达式,并期望看到结束"]"。这就是你获得
java.util.regex.PatternSyntaxException: Unclosed character class near index 0 [
你需要逃避角色" \ ["这应该有用。
答案 3 :(得分:0)
您必须使用[
\\[
个字符
String expectedTimeCriteria = "Month Days=" + monthDays.toString().replaceAll("\[", "{");