在名称值对的字符串中查找名称并替换其值

时间:2014-07-04 09:16:56

标签: java regex string

我有一个表格的字符串:

" { \"Name1\":\"Value1\",\"Name2\":\"Value2\",\"Name3\":\"Value3\" } "

除了大约50对这样的对。我需要从这50个中搜索大约10个名字(我不知道他们的位置,我只知道名字)并用字符串“newValue”替换它的相应值。

我该如何解决这个问题?我找到了Name的位置,让我们说它来自char 30-40,然后使用char 40以后的类型(\" .* \")的正则表达式找到Value的完整大小。 ,然后我可以替换。遗憾的是,一些值本身包含类型(\" ...... \")和其他任何东西的字符串(包括逗号,反斜杠,引号等)。所以我认为这不会起作用。有什么建议?

3 个答案:

答案 0 :(得分:0)

那是JSON吗?如果是这样,我宁愿使用the appropriate parser and its API而不是试图提出一个正则表达式来处理明确定义的语法。

答案 1 :(得分:0)

不是一个非常有效的解决方案..

public static void main(String[] args) {
    String s = " { \"Name1\":\"Value1\",\"Name2\":\"Value2\",\"Name3\":\"Value3\" } ";
    String name = "Name2", value = "mynewValue";
    String myRegex = name + ".*,";
    String newValue = name + "\\\":\\" +"\""+ value + "\\\",";
    String p = s.replaceAll(myRegex, newValue);
    System.out.println(s);
    System.out.println(p);
}

O / P:

{" Name1":" Value1"," Name2":" Value2"," Name3":& #34;值3" }

{" Name1":" Value1"," Name2":" mynewValue"," Name3":& #34;值3" }

示例-2:

{" Name1":" Value1"," Name2":" Va,lue2"," Name3" :"值3" }

{" Name1":" Value1"," Name2":" mynewValue"," Name3":& #34;值3" }

答案 2 :(得分:0)

我认为您仍然可以使用Json解析。像Json对象一样解析和操作值,然后修改字符串以应用所有反斜杠。例如,对于Gson,你可以这样做

import java.util.HashMap;
import java.util.Map;

import com.google.gson.Gson;


public class TenWords {
    public static void main(String[] args) throws Exception {
        String json = " { \"Name1\":\"Value1\",\"Name2\":\"Value2\",\"Name3\":\"Value3\" } ";

        Map<String, String> obj = new HashMap<String, String>();
        Gson gson = new Gson();
        obj = gson.fromJson(json, obj.getClass());
        obj.put("Name2", "NewValue");
        System.out.println(gson.toJson(obj).replaceAll("\"","\\\\\""));
    }
}

输出

{\"Name3\":\"Value3\",\"Name1\":\"Value1\",\"Name2\":\"NewValue\"}

唯一的问题是名称 - 值对的顺序不会被维护,但由于你的服务器将其视为Json,这应该是一个问题。