Json,正则表达式,java。如何只替换子串的一个出现

时间:2016-04-01 06:03:47

标签: java

假设我们有这样的字符串

 {"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}

2 个答案:

答案 0 :(得分:2)

你的正则表达式中有".+"+是一个“贪婪”的量词,这意味着.+将匹配最大可能的字符数。因此,匹配器将一直看到它可以达到的最远的引号。相反,如果要匹配最小可能的字符数,请在量词之后添加?,即

string.replaceAll( "\"className\":\".+?\"" ,className); 

在Java中,这被称为“不情愿”的限定符。 (我也看到它也叫其他名字。)

我同意有关正则表达式不是解决此问题的最佳方法的评论。

答案 1 :(得分:1)

替换以下声明 string.replaceAll(“\”className \“:\”。+ \“”,className);

与 string.replaceAll(“\”className \“:\”。+ \“”+“,”,className);

它给出了。

{ “的className”: “第二”, “I”:0, “姓名”:空}