Java подсказка консоли приложения - PullRequest
0 голосов
/ 26 января 2020

Я написал следующий код Java, чтобы показать приглашение и прочитать некоторые команды в командной строке:

try(Scanner keyboard = new Scanner(System.in)) {
    while (true) {
        System.out.print(">> ");
        System.out.flush();
        System.out.println(keyboard.nextLine());
    }
}

Подсказка ('>>') не отображается. В любом случае, если я введу текст в командной строке и нажму клавишу ввода, приглашение будет показано перед выводом println. Можно ли как-нибудь заставить корректно отобразить подсказку? Насколько я понимаю, достаточно было использовать flu sh.

Это то, что я вижу в консоли прямо сейчас, если я запускаю тест

test
>> test
this
>> this
again
>> again

Как видите, приглашение показать после ввода текста, прочитанного с клавиатуры .nextLine ().

Ответы [ 2 ]

0 голосов
/ 26 января 2020

Я запускаю консольное приложение внутри IntelliJ, хотя, похоже, если я запускаю jar из терминала, все в порядке. В результате, похоже, что в окне вывода IntelliJ что-то не так.

0 голосов
/ 26 января 2020

В Java все строки - это массивы символов с присоединенным к концу '\ 0' (также называемый нулевым завершающим символом). Например, если бы у меня был string str = "hello";, на самом деле str - это действительно массив из 6 символов: ['h', 'e', 'l', 'l', 'o', '\0'].

flush() просто удаляет '\ 0' после строки ">> ". Основная проблема заключается в том, что вы прочитали Scanner во вводе, прежде чем предлагать пользователю. Чтобы получить запрос перед запросом, переместите оператор println() сверху.

System.out.println(">> "); //assuming this is your prompt
try(Scanner keyboard = new Scanner(System.in)) {
while (true) {
      //some code
   }
}

Другой вариант - изменить .nextline(); на .next();. Разница между двумя значениями:

  • nextLine (): продвигает этот сканер за текущую строку и возвращает пропущенный ввод.
  • next (): находит и возвращает следующий полный токен от этого сканера.

Для получения дополнительной информации о Scanner функциях вы можете прочитать их здесь

...