繁体   English   中英

Java解析带引号的字符串

[英]Java parse string with quotes

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

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

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

我不知道我是否理解你,但我认为你错过的只是特殊字符逃脱。 你用内部双引号就像这样使用反斜杠。“

这是我想出来的,如果你能清理它,它应该更快。 可能更好和其他方法,但我使用拆分来分离所有逗号。 所以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));
    }
    }

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

如果你收到一对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。

如果它总是以相同的格式,你可以像这样转换它。

 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 .....

据我所知,你需要什么。

一个简单但低效的解决方案将使用这样的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等数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM