Ввод данных в консоли Java | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Backend-разработчик на PHP
-9%
Алгоритмы и структуры данных
-9%
Team Lead
-6%
Архитектура и шаблоны проектирования Разработчик IoT
-13%
C# Developer. Professional
-9%
HTML/CSS
-11%
C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Java Developer. Professional JavaScript Developer. Professional Базы данных Android Developer. Professional Framework Laravel Cloud Solution Architecture Highload Architect Reverse-Engineering. Professional Vue.js разработчик Agile Project Manager VOIP инженер Scala-разработчик Супер-практикум по использованию и настройке GIT Symfony Framework Java Developer. Basic Unity Game Developer. Professional Супер-интенсив Azure
Инфраструктура
Экспресс-курс «IaC Ansible»
-10%
Administrator Linux.Basic
-10%
Мониторинг и логирование: Zabbix, Prometheus, ELK
-10%
Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Administrator Linux. Professional
-6%
Дизайн сетей ЦОД
-13%
NoSQL Основы Windows Server MS SQL Server Developer Инфраструктурная платформа на основе Kubernetes Cloud Solution Architecture Highload Architect Разработчик голосовых ассистентов и чат-ботов VOIP инженер Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool"
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Ввод данных в консоли Java

Java_Deep_28.8-5020-e17b84.png

Этот материал будет полезен, прежде всего, начинающим 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("Ошибка");
}

Пока поток ввода содержит данные, а метод available осуществляет возвращение значений больше ноля, мы выполняем считывание кода символа раз за разом. Потом преобразуем его в сам символ с дальнейшим добавлением символа в конец строки.

Но неудобства в 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. На этом пока всё, следите за новостями!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться