Java解析带引号的字符串

时间:2012-04-13 18:30:26

标签: java android string parsing

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

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坐标,依此类推。有人指出我正确的方向吗?感谢。

6 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我不知道我是否理解你,但我认为你想念的只是特殊字符逃脱。使用内部双引号时,请使用反斜杠,例如“。”。

答案 2 :(得分:1)

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

public static void main(String [] args){

    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));
    }
    }

答案 3 :(得分:0)

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

如果你收到一对json数组,我们可以假设它的序列化版本就是这样(我在这里猜测,因为我很确定字符串看起来不像你所分享的那样):

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

如果您使用如此着名的Gson library将此字符串解析为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。

答案 4 :(得分: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 .....

据我所知,你需要什么。

答案 5 :(得分: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 (")

坐标String数组将包含120.1,140.4等数据。