java - 拆分字符串以获取坐标/点
问题描述
我正在使用以下代码进行拆分(<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>)
. 最后我需要两个点,每个点有两个值。
如何才能做到这一点?
解决方案
如果您使用的是 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 对象。
推荐阅读
- vagrant - 如何更改 vagrant ssh 上的欢迎启动画面?
- ionic3 - 用户在 AWS 用户池中更改密码时未通过身份验证
- php - WhatsApp URL 组链接的正则表达式
- c# - 物理对象在连续接触时“漂移”
- kubernetes - Google Kubernetes Engine - Prometheus 和 Grafana 的 Ingress 无法正常工作
- docker - 安装 docker 桌面后 postgre 无法将主机名“xxxx.xxxxxxx.xxx”转换为地址:nodename nor servname provided, or not known”
- java - 对数据库会话上下文的更改通过池连接重用持续存在
- javascript - fullcalendar v5 - 单击 daygrid 顶部的图标时打开模式
- r - 如何去除异常值但保留 NA
- javascript - 如何在不更改内容的情况下更改日期的时区?