2012-11-05 177 views
0

我想手动添加两个Java JSON字符串,所以为了这个,我需要删除“}”,并用逗号取代它的​​第一个字符“”的第一个JSON字符串,并删除第一个JSON字符串的第一个“{”。 这是我的计划的Java:替换字符串的最后一个字符和字符串

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

我想删除的最后一个字符“}”中的一个,取而代之的是“”并删除“的第一个字符{“in 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:非法重复

请建议。

+2

我会用一个合适的JSON解串器和串行像http://json.org/java/。 – Vikdor

回答

4

{是正则表达式控制字符,并且因为replaceFirst需要一个正则表达式的字符串表示作为第一个参数,你需要躲避{所以它不被视为控制字符:

String Bstr = B.replaceFirst("\\{", ""); 

我会说,使用替换方法在这里真的是过度杀伤,因为你只是试图从字符串的任何一端切断字符。这应该也是如此:

String totalString = A.substring(0, A.length()-1) + "," + B.substring(1); 
+0

非常感谢道文。 – Pawan

0

在您的前两条语句中存在一些问题。在substring方法中将0作为起始索引添加并留下。将\\设置为匹配模式中的换码字符,并在第二个语句中输入,作为替换值。

String Astr = A.substring(0, A.length()-1);//truncate the ending `}` 
String Bstr = B.replaceFirst("\\{", ",");//replaces first '{` with a ',' 
String totalString = Astr + Bstr ; 

请注意:有更好的方法,但我只是想纠正你的发言。

1

当然,正则表达式看起来并不是一个很好的工具。但以下似乎工作:

String str = "{..{...}..}}"; 
str = str.replaceFirst("\\{", ""); 
str = str.replaceFirst("}$", ","); 
System.out.println(str); 

输出

.. {...} ..},

+1

我认为'str.replaceFirst(“} $”,“,”);'对于第二个替换工作得很好,并且它有4个反斜杠。 – DaoWen

+0

@DaoWen:谢谢。将它添加到答案中,确实看起来更好。 :) –

+1

Java _really_需要某种原始字符串语法,您可以将它用于正则表达式,就像它们在Scala和C#中一样。我在稍后写了一个正则表达式,需要连续五次**反斜杠才能在Java中逃脱。的Bleh。 – DaoWen