Java替换所有非法重复

时间:2014-08-14 14:00:45

标签: java parsing replaceall

我有一个存储在字符串中的大json。我想更改String的某些部分,我收到此错误:

  

线程中的异常" main" java.util.regex.PatternSyntaxException:   索引6附近非法重复       "日期" {"零":"真"}             ^         在java.util.regex.Pattern.error(Pattern.java:1924)         在java.util.regex.Pattern.closure(Pattern.java:3104)         在java.util.regex.Pattern.sequence(Pattern.java:2101)         在java.util.regex.Pattern.expr(Pattern.java:1964)         在java.util.regex.Pattern.compile(Pattern.java:1665)         在java.util.regex.Pattern。(Pattern.java:1337)         在java.util.regex.Pattern.compile(Pattern.java:1022)         at java.lang.String.replaceAll(String.java:2162)         at basari.process.MsisdnProcess.setAllPropTypes(MsisdnProcess.java:51)         在testClass.MainTest.main(MainTest.java:98)

我的代码:

String example =  "deviceInfo":{"deviceBrand":"NOKIA","imei":"11111111","deviceModel":"6300","date":{"nil":"true"}}

example.replaceAll( "\"date\":{\"nil\":\"true\"}", "\"date\":\"2014-08-14T10:00:00.000+02:00\"");

3 个答案:

答案 0 :(得分:4)

如异常所示,它试图将其解析为正则表达式而不是纯文本。如果您只想将某个字符串替换为另一个字符串,请使用replace()代替replaceAll()

至于为什么你会得到这个特殊的例外:{ }字符有a specific meaning并用于表示重复(又名:某个正则表达式出现的次数)。在实际的正则表达式中,这应该是一个你不能在字符串中提供的整数值。

答案 1 :(得分:3)

您可能正在寻找String#replace,而不是replaceAll(使用正则表达式)。

你得到这个例外,因为在正则表达式中,{...}是一个量词。 例如:

  • {1,3} = 1至3次
  • {3,} = 3次或更多次
  • {3} =正好3次

答案 2 :(得分:3)

{}符号在正则表达式中有意义..你必须使用额外的反斜杠来逃避它们。

使用:

example.replaceAll( "\"date\":\\{\"nil\":\"true\"\\}",
        "\"date\":\"2014-08-14T10:00:00.000+02:00\""));