Как прочитать аргументы командной строки
Короткий ответ
Добавьте в main параметр String[] args — в нём слова, переданные после имени файла. Запуск: java Main.java Anna 30:
void main(String[] args) {
IO.println("Arguments: " + args.length);
for (String arg : args) {
IO.println(arg);
}
}Результат:
Arguments: 2
Anna
30Числа и значения по умолчанию
Аргументы всегда строки. Числа разберите сами и задайте значение по умолчанию, если аргумента нет. Запуск: java Main.java 5:
void main(String[] args) {
int count = args.length > 0 ? Integer.parseInt(args[0]) : 3;
String word = args.length > 1 ? args[1] : "hi";
IO.println(word.repeat(count));
}Результат:
hihihihihiФлаги
Флаги вида --verbose и --name=value проверяют по началу строки. Запуск: java Main.java --verbose --name=Oleg:
void main(String[] args) {
boolean verbose = false;
String name = "World";
for (String arg : args) {
if (arg.equals("--verbose")) {
verbose = true;
} else if (arg.startsWith("--name=")) {
name = arg.substring("--name=".length());
}
}
IO.println("Hello, " + name + (verbose ? " (verbose mode)" : ""));
}Результат:
Hello, Oleg (verbose mode)Для сложных интерфейсов командной строки есть библиотека picocli.
Частая ошибка
Обратиться к args[0], когда программу запустили без аргументов:
void main(String[] args) {
IO.println("Hello, " + args[0]);
}Результат:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0Проверяйте args.length и печатайте подсказку, как запускать программу.
Функции из этого ответа
- Integer.parseInt() — Превращает строку с целым числом в int.
- String.startsWith() — Проверяет, начинается ли строка с указанного префикса.