Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как прочитать аргументы командной строки

Короткий ответ

Добавьте в 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() — Проверяет, начинается ли строка с указанного префикса.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.