簡體   English   中英

如何存儲作為輸入給定的數組?

[英]How do you store an array given as input?

我對Java還是很陌生,在從命令行輸入數組時遇到困難。 例如,如果我使用以下程序運行程序:

java ChessTournament {0,2,4,3,3,2,4,3,0,3} {1923,1882,2103,2210}

然后如何將它們存儲在兩個單獨的整數數組中?

由於main中的參數將所有輸入作為字符串列表提供,所以我發現的唯一方法是在方括號上使用string.replace()並在逗號上使用string.split() (請參見下文),但是肯定有一種更簡單的方法。 。?

到目前為止,這是我對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(",");

}

最簡單的機制可能是使用掃描儀。 就像是:

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

老實說,您的方法非常可靠。 我認為它相當簡潔,它可能和使用Java之類的語言一樣好。 也就是說,我看到了兩個主要問題:

  1. 它不能處理參數格式不正確的情況。
  2. 它不會將單個值解析為數字。

您可以使用正則表達式和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]);

您可以在ideone上看到一個正在運行的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM