首页 > 解决方案 > 拆分字符串以获取坐标/点

问题描述

我正在使用以下代码进行拆分(<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>). 最后我需要两个点,每个点有两个值。

如何才能做到这一点?

标签: javastringsplitpoint

解决方案


如果您使用的是 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 对象。


推荐阅读