![](/img/trans.png)
[英]How do you store data values into an array from user input in a dialog box?
[英]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之類的語言一樣好。 也就是說,我看到了兩個主要問題:
您可以使用正則表達式和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]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.