2

我有一个字符串:

["4fd1cf1783353a15415","4ffecf87fcc40d110a965626"]

或者

["4fd5f684815345","4fd6ef3e60a676854651","4fd83c33c19164512153"]

而且我想将每个id(例如4fd5f684815345、4fd6ef3e60a676854651、4fd83c33c19164512153 ...)存储在一个独立的字符串(或ArrayList)中。

如何解析它,因为字符串可以是动态的(1、2、3 值或更多)?

或 JSON 数组解析:

我的 JSON

"idCards":[
"4fc52f95egvt418541515",
"4fd1d05454151541545115"
],

我的代码的一部分:

msg3 = (JSONArray) myobject.get("idCards");
System.out.println(msg3.toJSONString()); 

结果:

[4fc52f95egvt418541515","4fd1d05454151541545115"]

我想要 2 个不同字符串中的 2 个值。

非常感谢您的帮助!

4

6 回答 6

4

这似乎是一个 JSON 字符串。在这种情况下,您可以使用 Java JSON 库来帮助您将其解析为 Java 原生对象。

http://www.json.org/

http://code.google.com/p/google-gson/

String data = "[\"4fd5f684815345\",\"4fd6ef3e60a676854651\",\"4fd83c33c19164512153\"]";

// parse JSON String to JSON Array
JsonArray array = (JsonArray) (new JsonParser()).parse(data);

// build a Java ArrayList
List<String> stringList = new ArrayList<String>();

// for each item in JsonArray, add to Java ArrayList
for (int i = 0; i < array.size(); i++) {
    stringList.add((array.get(i)).getAsString());
}
于 2012-07-20T09:44:44.133 回答
2

我在这里做了一些假设:

  • [假设分隔符, ],前后没有空格,
  • 假设要提取的字符串中没有,和字符"

    input.substring(1, input.length() - 1).replaceAll("\\\"", "").split(",");
    

    或者,如果您不想弄乱正则表达式(replaceAll函数与正则表达式一起使用),那么您可以使用replace方法:

    input.substring(1, input.length() - 1).replace("\"", "").split(",");
    

由于上述假设,这个答案非常脆弱。如果数据确实是 JSON,请考虑使用 JSON 解析器。

于 2012-07-20T09:46:58.603 回答
2

我完全同意 JSON 的答案,但如果这是一次性破解,你可以这样做:

    String input = "[\"4fd5f684815345\",\"4fd6ef3e60a676854651\",\"4fd83c33c19164512153\"]";
    input = input.replace("[", "");
    input = input.replace("]", "");
    input = input.replace("\"", "");
    String[] parts = input.split(",");
于 2012-07-20T09:50:45.253 回答
1
    String str = "[\"4fd5f684815345\",\"4fd6ef3e60a676854651\",\"4fd83c33c19164512153\"]";
    String strArry[] = null;

    if(str.trim().length() > 0){
        str = str.substring(1 , str.length()-1).replaceAll("\\\"", "");
        strArry = str.split(",");
    }
于 2012-07-20T09:51:06.127 回答
0

用 拆分会更安全(因为 ' ,' 可能是小数分隔符)("\",\""),而不是删除"replaceAll 中的尾随,这里 subtring 不解析所有字符串:

final String str = "[\"4fd5f684815345\",\"4fd6ef3e60a676854651\",\"4fd83c33c19164512153\"]";

final String strArray[] = str.substring(2, str.length() - 2).split("\",\"");
final ArrayList<String> al = new ArrayList<String>();

for (final String string : strArray) {
    al.add(string);
    System.out.println(string);
}
System.out.println(al);    

for (final String string : strArray) { System.out.println(string); }

输出 :

4fd5f684815345
4fd6ef3e60a676854651
4fd83c33c19164512153
[4fd5f684815345, 4fd6ef3e60a676854651, 4fd83c33c19164512153]
于 2012-07-20T10:16:45.660 回答
0

如果 s 是输入字符串,它可以很简单

String[] idArray = s.replaceAll("[\\[\\]\"]", "").split(",");
于 2012-07-20T10:00:33.750 回答