Ввод данных в консоли Java
Этот материал будет полезен, прежде всего, начинающим Java-разработчикам. Мы поговорим о вводе данных на консоль и о том, зачем нужен класс Scanner.
Как правило, вывод данных на консоль в Java не представляет сложности. Обычно для этого используют System.out.print либо System.out.println. Но если дело доходит до ввода, то тут иногда возникают трудности. Они связаны с тем, что реализация консольного ввода в Java считается некоторыми специалистами достаточно сложной и неудобной. Однако освоить её и изучить работу сканера (Scanner) не составит труда.
Как вы уже поняли, работа эта строится с помощью класса Scanner. Кроме сканера, для ввода в Java можно использовать и класс InputStream (System.in) — о нём поговорим в первую очередь.
Ввод с помощью InputStream (System.in)
Java получает данные из консоли посредством системного потока ввода (Isystem.in), а значит, такой способ ввода кажется очевидным. Но у него есть недостаток. Связан он с тем, что системный поток получает лишь числовые коды символов, введённые в окно консоли. При этом за раз из этого потока можно прочитать только код одного символа. В результате для чтения строки или слова потребуется применение цикла.
Посмотрите пример считывания строки, введённой в консоли Java:
int inChar; String s = ""; try { inChar = System.in.read(); while (System.in.available() > 0) { s += (char) inChar; inChar = System.in.read(); } } catch (IOException e) { System.out.println("Ошибка"); }
Пока поток ввода содержит данные, а метод
Но неудобства в Java на этом не заканчиваются, ведь мы постоянно получаем данные в строковом формате. А если потребуется ввести целое число, нам придётся дополнить наш код приведением типов и соответствующей проверкой.
Собственно говоря, именно поэтому ввод данных в консольных приложениях напрямую сейчас редко используется, так как использование сканера (работа с классом Scanner) считается более удобной.
Ввод с помощью Scanner
Класс Scanner исключает трудности, связанные с применением системного потока ввода, плюс максимально упрощает ввод данных от пользователя в консоль Java. Мало того, чтение данных из консоли через сканер — это не единственная возможность Scanner, но это уже отдельная история.
Итак, экземпляр класса Scanner в Java создаётся посредством конструктора, принимающего поток ввода в качестве единственного параметра. Далее можно сразу же считывать готовые данные, используя семейство методов с префиксом next.
Продемонстрируем считывание строки, введённой в консоли Java. С помощью Scanner в конструктор осуществляется передача системного потока ввода.
Scanner in = new Scanner(System.in); System.out.print("Введите строку: "); String str = in.nextLine();
Сравнивая последний пример с вышеприведённым (с прямым считыванием String), мы уверенно скажем, что преимущество Scanner очевидно. Смотрите, благодаря Scanner нам не нужно вручную считывать коды символов, формируя строку в цикле. Scanner сам выполняет рутинные низкоуровневые функции, а потом предоставляет данные, готовые к использованию в программе.
Как мы уже говорили, класс Scanner в Java включает в себя целый ряд методов, используемых для считывания данных. Они отличаются названиями и типами возвращаемых значений: — nextLine, — nextBoolean, — nextInt, — nextDouble, — nextByte и прочие.
Также в классе Scanner выделяют методы с префиксом hasNext, позволяющие определять тип считываемых данных (hasNextLine, hasNextInt, hasNextBollean и т. п.). А если в потоке ввода есть данные соответствующего типа, данные методы возвратят true.
Scanner in = new Scanner(System.in); System.out.print("Введите строку: "); if (in.hasNextLine()){ String str = in.nextLine(); }
Таким образом в Java обеспечивается безопасность получения данных по отношению к несоответствию типов.
Что ж, ввести данные в консоль Java не так уж и сложно, особенно, если вы используете Scanner. На этом пока всё, следите за новостями!