我有一个表格的字符串:
" { \"Name1\":\"Value1\",\"Name2\":\"Value2\",\"Name3\":\"Value3\" } "
除了大约50对这样的对。我需要从这50个中搜索大约10个名字(我不知道他们的位置,我只知道名字)并用字符串“newValue”替换它的相应值。
我该如何解决这个问题?我找到了Name的位置,让我们说它来自char 30-40,然后使用char 40以后的类型(\" .* \"
)的正则表达式找到Value的完整大小。 ,然后我可以替换。遗憾的是,一些值本身包含类型(\" ...... \"
)和其他任何东西的字符串(包括逗号,反斜杠,引号等)。所以我认为这不会起作用。有什么建议?
答案 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,这应该是一个问题。