Чтобы избежать повторного использования колеса и ошибок, вам следует использовать библиотеку, например 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