分割字符串以获取坐标/点

时间:2020-02-13 21:42:51

标签: java string split point

我正在使用以下代码拆分(<x-coordinate>,<y-coordinate>)

String startPointStr = InputPattern.parsePoint(args.get(0));

String[] startCoords = startPointStr.substring(1, startPointStr.length() - 1).split(",");
Point startPoint = new Point(Integer.parseInt(startCoords[0]), Integer.parseInt(startCoords[1]));

现在,我想修改代码,使其也适用于(<x-coordinate>,<y-coordinate>),(<x-coordinate>,<y-coordinate>)。 最后,我需要两个Point,每个Point具有两个值。

这怎么办?

2 个答案:

答案 0 :(得分:1)

环顾四周,找到一个有效的解决方案,就像找到here的代码示例一样,它将忽略所有不是一系列数字的值。

    Pattern p = Pattern.compile("\\d+");
    Matcher m = p.matcher("(100,200),(300,400)");

    ArrayList<Integer> values = new ArrayList<>();
    while(m.find())
        values.add(Integer.parseInt(m.group()));

    ArrayList<Point> points = new ArrayList<>();
    if(values.size() % 2 == 0)
        for(int i = 0; i < values.size(); i += 2)
            points.add(new Point(values.get(i), values.get(i + 1)));

    for(Point point : points)
        System.out.println(point.x + ", " + point.y);

但是,如果您不担心效率问题,那么多重拆分解决方案将足以满足您的目的。

答案 1 :(得分:1)

如果您使用的是Java> = 9,则可以在Matcher上使用results()方法来获取MatchResult流并生成Point对象列表:

    String input = "(1,2),(3,4),(5,6),(500,600),(1000,2000)";
    Pattern cp = Pattern.compile("(\\d+(?=,),(?<=,)\\d+)");
    Matcher matcher = cp.matcher(input);
    List<Point> points = matcher.results()
                            .map(coordinate -> {
                                String xy = coordinate.group();
                                int x = Integer.parseInt(xy.split(",")[0]);
                                int y = Integer.parseInt(xy.split(",")[1]);
                                return new Point(x, y);
                            })
                            .collect(Collectors.toList());
    System.out.println("points: " + points);

结果:

点:[java.awt.Point [x = 1,y = 2],java.awt.Point [x = 3,y = 4],java.awt.Point [x = 5,y = 6] ,java.awt.Point [x = 500,y = 600],java.awt.Point [x = 1000,y = 2000]]

正则表达式模式获取不带括号的坐标。然后在map方法中,使用split方法获取x和y坐标并生成Point对象。