1 added
1 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: java, string, scanner, inputstream (system.in), ввод данных в консоли, консольный ввод, next, hasnext</p>
1
<p>Теги: java, string, scanner, inputstream (system.in), ввод данных в консоли, консольный ввод, next, hasnext</p>
2
<p>Этот материал будет полезен, прежде всего, начинающим Java-разработчикам. Мы поговорим о вводе данных на консоль и о том, зачем нужен класс Scanner.</p>
2
<p>Этот материал будет полезен, прежде всего, начинающим Java-разработчикам. Мы поговорим о вводе данных на консоль и о том, зачем нужен класс Scanner.</p>
3
-
<p>Как правило, вывод данных на консоль в Java не представляет сложности. Обычно для этого используют<strong>System.out.print</strong>либо<strong>System.out.println</strong>. Но если дело доходит до ввода, то тут иногда возникают трудности. Они связаны с тем, что реализация<strong>консольного ввода в Java</strong>��читается некоторыми специалистами достаточно сложной и неудобной. Однако освоить её и изучить работу сканера (<strong>Scanner</strong>) не составит труда.</p>
3
+
<p>Как правило, вывод данных на консоль в Java не представляет сложности. Обычно для этого используют<strong>System.out.print</strong>либо<strong>System.out.println</strong>. Но если дело доходит до ввода, то тут иногда возникают трудности. Они связаны с тем, что реализация<strong>консольного ввода в Java</strong>считается некоторыми специалистами достаточно сложной и неудобной. Однако освоить её и изучить работу сканера (<strong>Scanner</strong>) не составит труда.</p>
4
<p>Как вы уже поняли, работа эта строится с помощью класса<strong>Scanner</strong>. Кроме сканера, для ввода в Java можно использовать и класс<strong>InputStream (System.in)</strong>- о нём поговорим в первую очередь.</p>
4
<p>Как вы уже поняли, работа эта строится с помощью класса<strong>Scanner</strong>. Кроме сканера, для ввода в Java можно использовать и класс<strong>InputStream (System.in)</strong>- о нём поговорим в первую очередь.</p>
5
<h2>Ввод с помощью InputStream (System.in)</h2>
5
<h2>Ввод с помощью InputStream (System.in)</h2>
6
<p>Java получает данные из консоли посредством системного потока ввода (<strong>Isystem.in</strong>), а значит, такой способ ввода кажется очевидным. Но у него есть недостаток. Связан он с тем, что системный поток получает лишь<strong>числовые коды символов</strong>, введённые в окно консоли. При этом за раз из этого потока можно прочитать только код одного символа. В результате для чтения строки или слова потребуется<strong>применение цикла</strong>.</p>
6
<p>Java получает данные из консоли посредством системного потока ввода (<strong>Isystem.in</strong>), а значит, такой способ ввода кажется очевидным. Но у него есть недостаток. Связан он с тем, что системный поток получает лишь<strong>числовые коды символов</strong>, введённые в окно консоли. При этом за раз из этого потока можно прочитать только код одного символа. В результате для чтения строки или слова потребуется<strong>применение цикла</strong>.</p>
7
<p>Посмотрите пример считывания строки, введённой в консоли Java:</p>
7
<p>Посмотрите пример считывания строки, введённой в консоли Java:</p>
8
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("Ошибка"); }<p>Пока поток ввода содержит данные, а метод available осуществляет возвращение значений больше ноля, мы выполняем считывание кода символа раз за разом. Потом преобразуем его в сам символ с дальнейшим добавлением символа в конец строки.</p>
8
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("Ошибка"); }<p>Пока поток ввода содержит данные, а метод available осуществляет возвращение значений больше ноля, мы выполняем считывание кода символа раз за разом. Потом преобразуем его в сам символ с дальнейшим добавлением символа в конец строки.</p>
9
<p>Но неудобства в Java на этом не заканчиваются, ведь мы постоянно получаем<strong>данные в строковом формате</strong>. А если потребуется ввести целое число, нам придётся дополнить наш код приведением типов и соответствующей проверкой.</p>
9
<p>Но неудобства в Java на этом не заканчиваются, ведь мы постоянно получаем<strong>данные в строковом формате</strong>. А если потребуется ввести целое число, нам придётся дополнить наш код приведением типов и соответствующей проверкой.</p>
10
<p>Собственно говоря, именно поэтому ввод данных в консольных приложениях напрямую сейчас редко используется, так как использование сканера (работа с классом Scanner) считается более удобной.</p>
10
<p>Собственно говоря, именно поэтому ввод данных в консольных приложениях напрямую сейчас редко используется, так как использование сканера (работа с классом Scanner) считается более удобной.</p>
11
<h2>Ввод с помощью Scanner</h2>
11
<h2>Ввод с помощью Scanner</h2>
12
<p>Класс Scanner исключает трудности, связанные с применением системного потока ввода, плюс максимально<strong>упрощает ввод данных</strong>от пользователя в консоль Java. Мало того, чтение данных из консоли через сканер - это не единственная возможность<strong>Scanner</strong>, но это уже отдельная история.</p>
12
<p>Класс Scanner исключает трудности, связанные с применением системного потока ввода, плюс максимально<strong>упрощает ввод данных</strong>от пользователя в консоль Java. Мало того, чтение данных из консоли через сканер - это не единственная возможность<strong>Scanner</strong>, но это уже отдельная история.</p>
13
<p>Итак, экземпляр класса Scanner в Java создаётся посредством конструктора, принимающего поток ввода в качестве единственного параметра. Далее можно сразу же считывать готовые данные, используя семейство методов с префиксом<strong>next</strong>.</p>
13
<p>Итак, экземпляр класса Scanner в Java создаётся посредством конструктора, принимающего поток ввода в качестве единственного параметра. Далее можно сразу же считывать готовые данные, используя семейство методов с префиксом<strong>next</strong>.</p>
14
<p>Продемонстрируем считывание строки, введённой в консоли Java. С помощью Scanner в конструктор осуществляется передача системного потока ввода.</p>
14
<p>Продемонстрируем считывание строки, введённой в консоли Java. С помощью Scanner в конструктор осуществляется передача системного потока ввода.</p>
15
Scanner in = new Scanner(System.in); System.out.print("Введите строку: "); String str = in.nextLine();<p>Сравнивая последний пример с вышеприведённым (с прямым считыванием String), мы уверенно скажем, что<strong>преимущество Scanner очевидно</strong>. Смотрите, благодаря Scanner нам не нужно вручную считывать коды символов, формируя строку в цикле. Scanner сам выполняет рутинные низкоуровневые функции, а потом предоставляет данные, готовые к использованию в программе.</p>
15
Scanner in = new Scanner(System.in); System.out.print("Введите строку: "); String str = in.nextLine();<p>Сравнивая последний пример с вышеприведённым (с прямым считыванием String), мы уверенно скажем, что<strong>преимущество Scanner очевидно</strong>. Смотрите, благодаря Scanner нам не нужно вручную считывать коды символов, формируя строку в цикле. Scanner сам выполняет рутинные низкоуровневые функции, а потом предоставляет данные, готовые к использованию в программе.</p>
16
<p>Как мы уже говорили, класс Scanner в Java включает в себя целый ряд методов, используемых для считывания данных. Они отличаются названиями и типами возвращаемых значений: - nextLine, - nextBoolean, - nextInt, - nextDouble, - nextByte и прочие.</p>
16
<p>Как мы уже говорили, класс Scanner в Java включает в себя целый ряд методов, используемых для считывания данных. Они отличаются названиями и типами возвращаемых значений: - nextLine, - nextBoolean, - nextInt, - nextDouble, - nextByte и прочие.</p>
17
<p>Также в классе Scanner выделяют методы с префиксом<strong>hasNext</strong>, позволяющие определять тип считываемых данных (hasNextLine, hasNextInt, hasNextBollean и т. п.). А если в потоке ввода есть данные соответствующего типа, данные методы возвратят true.</p>
17
<p>Также в классе Scanner выделяют методы с префиксом<strong>hasNext</strong>, позволяющие определять тип считываемых данных (hasNextLine, hasNextInt, hasNextBollean и т. п.). А если в потоке ввода есть данные соответствующего типа, данные методы возвратят true.</p>
18
Scanner in = new Scanner(System.in); System.out.print("Введите строку: "); if (in.hasNextLine()){ String str = in.nextLine(); }<p>Таким образом в Java обеспечивается безопасность получения данных по отношению к несоответствию типов.</p>
18
Scanner in = new Scanner(System.in); System.out.print("Введите строку: "); if (in.hasNextLine()){ String str = in.nextLine(); }<p>Таким образом в Java обеспечивается безопасность получения данных по отношению к несоответствию типов.</p>
19
<p>Что ж,<strong>ввести данные в консоль Java</strong>не так уж и сложно, особенно, если вы используете<strong>Scanner</strong>. На этом пока всё, следите за новостями!</p>
19
<p>Что ж,<strong>ввести данные в консоль Java</strong>не так уж и сложно, особенно, если вы используете<strong>Scanner</strong>. На этом пока всё, следите за новостями!</p>
20
20