我对Java很新,并且在从命令行输入数组时遇到了困难。例如,如果我使用:
运行我的程序java ChessTournament {0,2,4,3,3,2,4,3,0,3} {1923,1882,2103,2210}
我如何将它们存储在两个单独的整数数组中?
由于main中的参数将所有输入都作为字符串列表给出,我找到的唯一方法是在括号上使用string.replace()
,在逗号上使用string.split()
(见下文),但肯定会有&#39 ;更简单的方法......?
这是我迄今为止对String[]
类型的输入所做的事情:
public static void main(String[] args) {
String[] arrival = new String[args[0].length()];
args[0] = args[0].replace("{","");
args[0] = args[0].replace("}","");
arrival = (args[0]).split(",");
String[] departure = new String[args[1].length()];
args[1] = args[1].replace("{","");
args[1] = args[1].replace("}","");
departure = (args[1]).split(",");
}
答案 0 :(得分:1)
最简单的机制可能是使用扫描仪。类似的东西:
List<Integer> intList = new ArrayList<>();
Scanner scanner = new Scanner(args[0]).useDelimeter("[{},]");
while (scanner.hasNextInt())
intList.add(scanner.nextInt());
答案 1 :(得分:0)
你的方法老实说非常可靠。我认为它相当简洁,而且它可能与你将使用像Java这样的语言一样好。也就是说,我看到了两个主要问题:
您可以使用正则表达式和Java 8流相当优雅地解决这两个问题。
public static int[] parseIntegerArray(String data) {
if (!data.matches("^\\{(\\d+,)*\\d+?\\}$"))
throw new RuntimeException("Malformed integer array.");
return Arrays.stream(data.replaceAll("[{}]", "").split(","))
.mapToInt(x -> Integer.parseInt(x))
.toArray();
}
然后您可以使用main
中的此功能:
if (args.length < 2)
throw new RuntimeException("Requires two array arguments.");
int[] arrival = parseIntegerArray(args[0]);
int[] departure = parseIntegerArray(args[1]);