无法替换[with {

时间:2016-02-26 10:58:13

标签: java pattern-matching

我正在尝试使用以下代码将[替换为{

String expectedTimeCriteria = "Month Days=" + monthDays.toString().replaceAll("[", "{");

但是会抛出以下错误:

 java.util.regex.PatternSyntaxException: Unclosed character class near index 0 [
                                                                               ^

你能帮我理解这里出了什么问题吗?

4 个答案:

答案 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("\[", "{");