我目前正在开发一个用户界面,并且已经实现了这个命令 add track <startpoint> -> <endpoint>
.
现在,我要执行这个命令 add switch <startpoint> -> <endpoint1>,<endpoint2>
.
然而,我不知道如何有效地分割第三个论点( <endpoint1>,<endpoint2>
).
我就是这样做的 add track
命令:
String startPointStr = InputPattern.parsePoint(args.get(0));
String endPointStr = InputPattern.parsePoint(args.get(2));
// TODO: Can I improve the code?
String[] startCoords = startPointStr.substring(1, startPointStr.length() - 1).split(",");
Point startPoint = new Point(Integer.parseInt(startCoords[0]), Integer.parseInt(startCoords[1]));
String[] endCoords = endPointStr.substring(1, endPointStr.length() - 1).split(",");
Point endPoint = new Point(Integer.parseInt(endCoords[0]), Integer.parseInt(endCoords[1]));
顺便说一句:点= (<x-coordinate>,<y-coordinate>)
. parsepoint方法使用regex检查“\(\d+,\d+\)”的模式。
所以我想创建另一个点 Point secondEndPoint = new Point(...);
对于终结点2。我该怎么做(regex,.split(),…,?)。
1条答案
按热度按时间xqnpmsa81#
你什么都可以做
split
当你这么做的时候。但是,如果您想更灵活地允许哪些内容作为输入,您可以允许用户更自由地使用或不使用空间。例如,可能允许用户输入坐标作为(123, 456)
. 或者,可能不需要在两侧都有空间->
接线员。在这种情况下,可以使用一个regex来识别完整的命令:查看regex演示
^\s*add\s+switch\s*
匹配字符串的开头,后跟0个或多个空格,后跟add
后跟1个或多个空格后跟switch
后跟0个或多个空格。(?:\(\s*(\d+)\s*,\s*(\d+)\s*\))
a坐标:a(
后跟0个或多个空格,后跟1个或多个数字,后跟0个或多个空格,后跟,
后跟0个或多个空格,后跟1个或多个数字,后跟0个或多个空格,后跟)
.\s*->\s*
匹配0个或多个空格,后跟->
后跟0个或更多空格。(?:\(\s*(\d+)\s*,\s*(\d+)\s*\))
匹配坐标。\s*,\s*
匹配0个或多个空格,后跟,
后跟0个或更多空格。(?:\(\s*(\d+)\s*,\s*(\d+)\s*\))
匹配坐标。\s*$
匹配0个或多个后跟字符串结尾的空格。第一个坐标位于捕捉组1和2中,第二个坐标位于捕捉组3和4中,第三个坐标位于捕捉组5和6中。
示例代码:
印刷品: