爲避免重蹈覆轍,您應該考慮使用像Apache Commons CLI這樣的庫,它可以爲您正確解析您的命令。
public static void main(final String[] args) {
Options options = new Options();
options.addOption(
Option.builder("y")
.required(true)
.hasArg(true)
.desc("The year")
.longOpt("year")
.build()
);
options.addOption(
Option.builder("m")
.required(true)
.desc("The months")
.numberOfArgs(Option.UNLIMITED_VALUES)
.longOpt("month")
.build()
);
CommandLineParser parser = new DefaultParser();
CommandLine cmd;
try {
cmd = parser.parse(options, args);
} catch (ParseException e) {
System.err.println("Could not parse the command due to: " + e.getMessage());
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("java", options);
return;
}
String year = cmd.getOptionValue("y");
String[] months = cmd.getOptionValues("m");
// Rest of your code here
}
然後,您將能夠在今年的情況下,使用-y
或--year
,並在幾個月的情況下,使用-m
或--month
提供你的論點。在解析錯誤的情況下,該用法也將被打印。
如果你想要做手工(假設你有在今年第一,隨後的幾個月裏),你的代碼將爲:
public static void main(final String[] args) {
if (args.length < 2)
throw new IllegalStateException("Not enough arguments");
String year = args[0];
String[] months = new String[args.length - 1];
System.arraycopy(args, 1, months, 0, months.length);
...
}
但是,我們應該增加更多的測試,以確保參數總數是正確的,參數是有效的,這就是我建議使用庫的原因。
'year = args [0];'? – SomeJavaGuy
來自命令行的參數存儲在args中主要類 – Jens