如何拆分这样的字符串?

时间:2017-10-16 06:22:40

标签: android

我得到了这样的结果

{PickupLocation=204, Jai nagar main road, Chandragandhi Nagar, Ponmeni, Madurai, Tamil Nadu 625016, DropLocation=204, Jai nagar main road, Chandragandhi Nagar, Ponmeni, Madurai, Tamil Nadu 625016, PickupLongitude=78.0928147163509, DropLongitude=78.0928147163509, PickupLatitude=9.92065524221638, DropLatitude=9.92065524221638, CustomerId=99, PhoneNumber=96788484887, CustomerName=Mayil, CustomerLastName=Kannan}

我试过这个

 public static void jsonToMap(String t) throws JSONException {

    HashMap<String, String> map = new HashMap<String, String>();
    JSONObject jObject = new JSONObject(t);
    Iterator<?> keys = jObject.keys();

    while( keys.hasNext() ){
        String key = (String)keys.next();
        String value = jObject.getString(key);
        map.put(key, value);

    }

    System.out.println("json : "+jObject);
    System.out.println("map : "+map);
}

但是他们不会给json格式,但是我想分开来分别获取值,怎么可能,抱歉我的英语很差,我是android的初学者。

2 个答案:

答案 0 :(得分:1)

并非CSV列表中的所有值都具有等号,因此地图可能无法完全记录您的值。在下面的代码片段中,我将没有等号的值存储为地图中没有相应值的键。你可以在两端去掉括号,用逗号和空格分割,然后再用=拆分,以获得你想到的地图:

String input = "...";
Map<String, String> map = new HashMap<>();
input = input.replaceAll("\\s+\\{\\s+(.*)\\s+\\}\\s+", "$1");
String[] parts = input.split(",\\s+");
for (String part : parts) {
    String[] vals = part.split("=");
    map.put(vals[0], vals.length > 1 ? vals[1] : null);
}

for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
}

在这里演示:

Rextester

答案 1 :(得分:0)

不幸的是,这不是一个有效的Json。恕我直言,你应该:

  1. 在逗号上分割字符串
  2. 表示每个子字符串,按=
  3. 拆分
  4. 如果你有=,那么你有一个键/值对要添加到词典
  5. 如果没有,那么您可以在默认密钥中构建一个数组。