假设我们有这样的字符串
{"className":"first","i":0,"name":null}
如何将其转换为:
{"className":"second","i":0,"name":null}
我有这个:
///Initialy className is a className in lower Case (for example "first")
className = "\"className\":\""+className+"\",";
string.replaceAll( "\"className\":\".+\"" ,className);
但它给出了:
{"className":"second",:null}
答案 0 :(得分:2)
你的正则表达式中有".+"
。 +
是一个“贪婪”的量词,这意味着.+
将匹配最大可能的字符数。因此,匹配器将一直看到它可以达到的最远的引号。相反,如果要匹配最小可能的字符数,请在量词之后添加?
,即
string.replaceAll( "\"className\":\".+?\"" ,className);
在Java中,这被称为“不情愿”的限定符。 (我也看到它也叫其他名字。)
我同意有关正则表达式不是解决此问题的最佳方法的评论。
答案 1 :(得分:1)
替换以下声明 string.replaceAll(“\”className \“:\”。+ \“”,className);
与 string.replaceAll(“\”className \“:\”。+ \“”+“,”,className);
它给出了。
{ “的className”: “第二”, “I”:0, “姓名”:空}