如何存储作为输入的数组?

时间:2015-02-08 21:45:31

标签: java arrays input

我对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(",");

}

2 个答案:

答案 0 :(得分:1)

最简单的机制可能是使用扫描仪。类似的东西:

List<Integer> intList = new ArrayList<>();
Scanner scanner = new Scanner(args[0]).useDelimeter("[{},]");
while (scanner.hasNextInt())
    intList.add(scanner.nextInt());

答案 1 :(得分:0)

你的方法老实说非常可靠。我认为它相当简洁,而且它可能与你将使用像Java这样的语言一样好。也就是说,我看到了两个主要问题:

  1. 它不处理参数格式不正确的情况。
  2. 它不会将单个值解析为数字。
  3. 您可以使用正则表达式和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]);
    

    You can see a running example at ideone here.