我想手动添加两个java JSON String,所以为此我需要删除“}”并将其替换为第一个JSON String的逗号“,”和删除第二个JSON字符串的第一个“{”。 这是我的程序
import java.util.Map;
import org.codehaus.jackson.type.TypeReference;
public class Hi {
private static JsonHelper jsonHelper = JsonHelper.getInstance();
public static void main(String[] args) throws Exception {
Map<String, Tracker> allCusts = null;
String A = "{\"user5\":{\"Iden\":4,\"Num\":1},\"user2\":{\"Iden\":5,\"Num\":1}}";
String B = "{\"user1\":{\"Iden\":4,\"Num\":1},\"user3\":{\"Iden\":6,\"Num\":1},\"user2\":{\"Iden\":5,\"Num\":1}}";
String totalString = A + B;
if (null != totalString) {
allCusts = (Map<String, Tracker>) jsonHelper.toObject(
totalString, new TypeReference<Map<String, Tracker>>() {
});
}
System.out.println(allCusts);
}
}
添加两个字符串A + B时
我想删除A中“}”的最后一个字符,并将其替换为“,”并删除B中“{”的第一个字符。
这应该是它的样子。
String A = "{\"user5\":{\"Iden\":4,\"Num\":1},\"user2\":{\"Iden\":5,\"Num\":1},";
String B = "\"user1\":{\"Iden\":4,\"Num\":1},\"user3\":{\"Iden\":6,\"Num\":1},\"user2\":{\"Iden\":5,\"Num\":1}}";
我试过了
String Astr = A.replace(A.substring(A.length()-1), ",");
String Bstr = B.replaceFirst("{", "");
String totalString = Astr + Bstr ;
有了这个我得到了
线程“main”中的异常java.util.regex.PatternSyntaxException:非法重复
请建议。
答案 0 :(得分:4)
{
是正则表达式的控制字符,由于replaceFirst
将正则表达式的字符串表示作为其第一个参数,因此您需要转义{
以使其不被处理作为控制角色:
String Bstr = B.replaceFirst("\\{", "");
我会说使用替换方法在这里真的太过分了,因为你只是试图从一个字符串的两端切掉一个字符。这也应该有效:
String totalString = A.substring(0, A.length()-1) + "," + B.substring(1);
答案 1 :(得分:1)
当然,正则表达式看起来不是一个非常好的工具。但以下似乎有效:
String str = "{..{...}..}}";
str = str.replaceFirst("\\{", "");
str = str.replaceFirst("}$", ",");
System.out.println(str);
<强>输出强>:
.. {...} ..},
答案 2 :(得分:0)
前两个陈述中的一些问题。在0
方法中添加substring
作为起始索引,然后离开。将\\
作为转义字符串放在匹配模式中,并在第二个语句中添加,
作为替换值。
String Astr = A.substring(0, A.length()-1);//truncate the ending `}`
String Bstr = B.replaceFirst("\\{", ",");//replaces first '{` with a ','
String totalString = Astr + Bstr ;
请注意:有更好的方法,但我只是想纠正你的陈述。