1

我正在尝试解析一个字符串,但我不确定如何解析它,因为它不是简单的逗号解析或类似的东西。我拥有的字符串与此类似:

String s = "[\"142.5,106.1\",\"142.5,112.1\",\"143.5,119.1\",\"144.5,128.1\",\"146.5,138.1\",\"147.5,148.1\"]";

该字符串来自一个 jsonarray,所以为什么格式是这样的,但我的目标是将它解析为一个列表。所以 142.5,106.1 是一个点的 x,y 坐标,依此类推。有人为我指出正确的方向吗?谢谢。

4

6 回答 6

2

您可以简单地使用 StringTokenizer("\"[,]"),然后一次读取两个值(x、y、x、y 等)。

于 2012-04-13T18:33:03.067 回答
1

我不知道我是否理解你,但我认为你错过的只是特殊字符转义。与您一起使用内部双引号,使用像这样的反斜杠 \"。

于 2012-04-13T18:33:55.533 回答
1

这是我想出的,如果你可以清理括号,它应该会更快。可能更好和其他方法可以做到这一点,但我使用 split 来分隔所有逗号。所以列表按顺序包含它们,即 list.get[0] 和 list.get[1] 是一对,等等。

公共静态无效主要(字符串[]参数){

    String s ="[\"142.5,106.1\",\"142.5,112.1\",\"143.5,119.1\",\"144.5,128.1\",\"146.5,138.1\",\"147.5,148.1\"]";
    String[] set= s.split(",");
    ArrayList<Double> list = new ArrayList<Double>();
    for(int i=0; i<set.length;i++){
        System.out.println(set[i]);
        list.add(Double.parseDouble(set[i].replaceAll("\\[", "").replaceAll("\"", "").replaceAll("\\]", "")));

    }
    for(int i=0;i<list.size();i++){
        System.out.println(list.get(i));
    }
    }
于 2012-04-13T18:49:49.833 回答
0

我知道这完全不是您要问的问题,但我想讨论您任务中的正确方法,而不是立即回答您发布的问题。

如果您收到一个 json 数组对,我们可以假设它的序列化版本将是这样的(我在这里推测,因为我很确定该字符串看起来不像您共享的字符串):

 "[[123, 234], [234, 456],...]"

如果您使用著名的Gson 库将此字符串解析为 java 对象,您可以这样做:

    String json = "[[123.3, 234.5], [234.1, 456.5]]";
    Gson gson = new Gson();
    double [][] points = gson.fromJson(json, double[][].class);
    System.out.println(points[1][1]);

这输出:456.5正如预期的那样,您不需要自己处理解析 json。

于 2012-04-13T18:41:05.293 回答
0

如果它始终采用相同的格式,您可以像这样转换它。

 String s ="[\"142.5,106.1\",\"142.5,112.1\"]";

            s=s.replace("[", "");
            s=s.replace("]", "");

            String[] ss=s.split("\"");
        List list=   Arrays.asList(ss);

list.get(0);=142.5,106.1 // so on .....

据我了解您的要求。

于 2012-04-13T18:45:03.900 回答
0

一个简单但低效的解决方案将使用这样的 String 方法:

    //(being s your example's String)
    String[] coordinates = s.substring(2, s.length() - 2).split("\",\"");
    //the two at the beginning and end of the substring is to eliminate braces ([]) and the first and last quotes (")

坐标字符串数组将包含 120.1,140.4 等数据。

于 2012-04-13T18:58:18.873 回答