Java 通过命令行加载线坐标-自定义输入格式
我必须通过命令行加载坐标 坐标的格式如下所示:Java 通过命令行加载线坐标-自定义输入格式,java,command-line-arguments,Java,Command Line Arguments,我必须通过命令行加载坐标 坐标的格式如下所示: 0 1 1 1 1 1 2 2 12 12 13 13 3 3 4 4 "0 1 1 1 1 1 2 2 12 12 13 13 3 3 4 4" 第一行坐标为: x1:0 y1:1 x2:1 y2:1 第二行坐标为: x1:1 y1:1 x2:2 y2:2 等等 我尝试了什么? 试图在输入中找到“双空格”,但它似乎只加载数字,因此我无法跟踪用户是否确实通过了线的4x坐标(使用此方法,用户可以通过0 1 0 2
0 1 1 1 1 1 2 2 12 12 13 13 3 3 4 4
"0 1 1 1 1 1 2 2 12 12 13 13 3 3 4 4"
第一行坐标为:
x1:0 y1:1
x2:1 y2:1
第二行坐标为:
x1:1 y1:1
x2:2 y2:2
等等
我尝试了什么?
试图在输入中找到“双空格”,但它似乎只加载数字,因此我无法跟踪用户是否确实通过了线的4x坐标(使用此方法,用户可以通过0 1 0 2 12 13
,它将通过,这是错误的):
我还尝试将所有参数作为一个新列表加载,但刚刚意识到问题与上面相同,我仍然无法正确跟踪用户是否在我的模板中传递数据:
public void begin(String args[]) {
rawArgs = new ArrayList<>();
rawArgs.addAll(Arrays.asList(args));
System.out.println(rawArgs);
}
这样我就可以跟踪用户是否确实通过了单线的4x坐标。我如何跟踪这个双空间
PS.我想用引号将这些数据传递如下:
0 1 1 1 1 1 2 2 12 12 13 13 3 3 4 4
"0 1 1 1 1 1 2 2 12 12 13 13 3 3 4 4"
但我不确定如何正确有效地将字符串转换成数字
展望未来:
我想把这些数据保存为整数数组[4],你认为呢?可以吗
例如:
ArrayList<ArrayList<Integer>> coordinates;
ArrayList坐标;
而坐标[0]
将在数组列表中包含[0,1,1]
我将感谢您的帮助我将遵循您的第二种方法,这意味着传递一个带有坐标的字符串作为一个参数(在引号中)。使用单个字符串通常比使用多个参数更简单 我首先要做的是检查输入是否与正则表达式匹配,正则表达式通常如下所示:
D
它看起来很简单:
^\d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+ \d+$
(当然可以缩短一点,但让我们尽量简单)
现在,您不必担心收到的输入是否有效,因此您可以专注于解析它。我的想法是迭代除以空格的字符串,将其转换为整数,然后组合成数组。有四组四个坐标,因此它是一个由四个整数的四个数组列表组成的数组列表
下面是我写的一段代码:
import java.util.ArrayList;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
final String regex = "^\\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+$";
if(args.length != 1 || !args[0].matches(regex)) {
System.out.println("Input format should be: \"0 1 1 1 1 1 2 2 12 12 13 13 3 3 4 4\"");
System.exit(-1);
}
var groups = args[0].split(" ");
ArrayList<ArrayList<Integer>> coordinates = new ArrayList<>();
for(var group : groups) {
var arrayOfStrings = group.split(" ");
var coordinate = new ArrayList<Integer>();
for(var singleString : arrayOfStrings) {
coordinate.add(Integer.parseInt(singleString));
}
coordinates.add(coordinate);
}
//printing coordinates
for(var singleGroup : coordinates) {
System.out.println("[" + singleGroup.stream().map(String::valueOf).collect(Collectors.joining(", ")) + "]");
}
}
}
发现保留点的最佳方法是使用HashSet
,因为它可以防止数据的重复,所以我可以从一行插入点1,1
,从另一行插入点1,1
,它将合并到一个点
[0, 1, 1, 1]
[1, 1, 1, 2]
[12, 12, 13, 13]
[3, 3, 4, 4]