为避免重蹈覆辙,您应该考虑使用像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