我有一个存储在字符串中的大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\"");
答案 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\""));