Как полностью очистить объект ввода System.in?
Товарищи, подскажите, пожалуйста, как мне очистить объект ввода System.in? Класс Scanner не рассматриваем. Мне нужно именно с ASCII поработать.
Я хочу зациклить ввод, чтобы если вдруг пользователь ввёл не 1 или 2, то его попросили бы ввести одну из этих цифр заново, и так до тех пор, пока он этого не сделает. Но, очевидно, как только я понимаю, что он ввёл белеберду, мне нужно очистить объект ввода, и всё по новой.
И если в классе Scanner я бы просто использовал .nextLine(), то тут команда System.in.read() извлечёт из этого объекта (не у верен, что правильно выражаюсь) только один символ, а если user ввёл условно «hello», то это уже 5 раз нужно её вызывать; крч я же заранее не знаю, сколько мне потребуется её вызвать, что бы объект System.in оказался пустым.
Как быть?
import java.io.IOException; public class Main < public static void main(String[] args) throws IOException < int code; System.out.print("Введите 1 или 2: "); while (true) < code = System.in.read(); if (code == 49 || code == 50) < break; >else < //Необходимо очистить поток ввода. System.out.print("Введите 1 или 2: "); >> System.out.println("Программа завершила свою работу."); > >
Отслеживать
задан 6 мар 2021 в 12:09
113 7 7 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Возможно вам подойдет это:
import java.io.IOException; public class SystemIn < public static void main(String[] args) throws IOException < int code; System.out.print("Введите 1 или 2: "); while (true) < code = System.in.read(); if (code == 49 || code == 50) < break; >else < //Необходимо очистить поток ввода. System.in.skip(System.in.available()); System.out.print("Введите 1 или 2: "); >> System.out.println("Программа завершила свою работу."); > >
Отслеживать
ответ дан 6 мар 2021 в 17:19
Андрей Колычев Андрей Колычев
113 6 6 бронзовых знаков
- java
- ооп
- ascii
- поток-ввода
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Clear Scanner in Java

- Java Clear Scanner Using nextLine()
- Create a New Scanner Object to Clear Scanner in Java
The Scanner class in Java is often used to take input or output. We create an object of the Scanner class to use its functions.
We cannot use the close() method of Scanner because once a Scanner is closed by this method, we cannot take input as the input stream has been closed.
There are other ways to clear the Scanner in Java, and below are the examples that explain these methods.
Java Clear Scanner Using nextLine()
To clear the Scanner and to use it again without destroying it, we can use the nextLine() method of the Scanner class, which scans the current line and then sets the Scanner to the next line to perform any other operations on the new line.
In the example below, inside the while loop, we ask the user for an input and check if it is a valid binary using hasNextInt(radix) . If it is a valid binary, then it will be stored in the binary variable, and if it is not a binary value, then a message will be printed to ask the user to input a valid binary value.
In this situation, if we don’t clear the Scanner , the loop will never end. If the value is not binary, then the Scanner should go to a new line to take a new input. This is is why nextLine() is used to skip the current line and go to a new line.
import java.util.Scanner; public class ClearScanner public static void main(String[] args) Scanner input = new Scanner(System.in); int binary = 0; int radix = 2; while (binary == 0) System.out.print("Please input a valid binary: "); if (input.hasNextInt(radix)) binary = input.nextInt(radix); > else System.out.println("Not a Valid Binary"); > input.nextLine(); > System.out.print("Converted Binary: " + binary); > >

Create a New Scanner Object to Clear Scanner in Java
Another method to clear the Scanner is to create a new Scanner object when the user types a value other than a binary value. This method works because when a new object is created, the existing Scanner object is cleared, and a new input stream is started.
import java.util.Scanner; public class ClearScanner public static void main(String[] args) Scanner input = new Scanner(System.in); int binary = 0; int radix = 2; while (binary == 0) System.out.print("Please input a valid binary: "); if (input.hasNextInt(radix)) binary = input.nextInt(radix); > else System.out.println("Not a Valid Binary"); > input = new Scanner(System.in); > System.out.print("Converted Binary: " + binary); > >
Please input a valid binary: 23 Not a Valid Binary Please input a valid binary: 11101 Converted Binary: 29
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
Related Article — Java Scanner
- Fix Java Scanner NextLine Skips
- Difference Between next() and nextLine() Methods From Java Scanner Class
- Get a Keyboard Input in Java
- Press Enter to Continue in Java
- Get a Char From the Input in Java
Copyright © 2023. All right reserved
Очистка буфера Scanner
Снова я с нубскими вопросами.
Но поиск по гуглу мне ничего путевого не дал.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
while (true){ System.out.println("Input point of menu\n 0 - Save\n 1 - Load\n 2 - Print\n 4 - exit"); try {int i=scan.nextInt(); if (i>=0&i3){ mainMenu[i].runMenu(); // Ну собственно говоря неважно, что там. :)))) } else if (i==4) { break;} } catch (java.util.InputMismatchException e){ System.out.println (e); System.out.println ("input number. "); String s=scan.nextLine(); // Вот это конечно помогает, но это же криво! } }
Так вот.
Если убрать строчку 12, то на сколько я понимаю, при внесении, например, символа, scan не очищается при переходе в catch.
И при переходе на следующую итерацию, scan.nextInt() опять получает символ и опять все по кругу.
как сделать так, чтобы без вот этого String s=scan.nextLine(); все очищалось?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Очистка объекта Scanner
Всем привет! Применяю Scanner для считывания с консоли два раза. Scanner indomainname = new.
Scanner в Java (scanner.nextLine()
Добрые люди, есть код, который при одном itemName = scanner.nextLine(); не останавливается чтобы я.
Очистка буфера!
У меня трабл! В масив записывает непонятное значение. Хотя должно запрашывать пользователя. Я.
Очистка буфера обмена
Здравствуйте подскажите как в код vba внести код очистки буфера обмена после проведения вставки.
Проблема пропуска метода nextLine() после использования next() или nextFoo() в Java
В процессе работы с Java, особенно при использовании класса Scanner для чтения ввода, может возникнуть некоторая путаница. Одна из самых распространенных проблем заключается в том, что метод nextLine() кажется «пропускается» после использования других методов, таких как next() или nextFoo().
Пример такого кода:
System.out.println("Введите числовое значение"); int option; option = input.nextInt(); // Чтение числового значения из ввода System.out.println("Введите первую строку"); String string1 = input.nextLine(); // Чтение первой строки (кажется, что пропускается) System.out.println("Введите вторую строку"); String string2 = input.nextLine(); // Чтение второй строки (появляется сразу после чтения числового значения)
В этом примере, после ввода числового значения, программа кажется пропускает запрос на ввод первой строки и сразу переходит к запросу на ввод второй строки.
Введите числовое значение 3 // Это мой ввод Введите первую строку // Программа должна остановиться здесь и ждать моего ввода, но она пропускает этот этап Введите вторую строку // . и эта строка выполняется и ждет моего ввода
Это происходит из-за того, как работает сканер. Когда вы используете методы next() или nextFoo(), сканер читает ввод до тех пор, пока не встречает пробел (или любой другой разделитель, заданный по умолчанию). Однако он оставляет символ новой строки (enter) в буфере ввода.
Затем, когда вы вызываете метод nextLine(), он читает и возвращает все символы до следующего символа новой строки… который уже находится в буфере ввода! Поэтому кажется, что nextLine() пропускается — он просто сразу же встречает символ новой строки и завершает свою работу.
Чтобы решить эту проблему, вы можете просто добавить дополнительный вызов nextLine() после next() или nextFoo(). Это «очистит» символ новой строки из буфера ввода, позволяя следующему вызову nextLine() работать правильно.
System.out.println("Введите числовое значение"); int option; option = input.nextInt(); // Чтение числового значения из ввода input.nextLine(); // Очистка буфера ввода System.out.println("Введите первую строку"); String string1 = input.nextLine(); // Теперь это работает правильно! System.out.println("Введите вторую строку"); String string2 = input.nextLine();
Теперь все работает так, как и ожидалось!