Считать строку чисел java

Чтение из консоли

В этой статье мы разберёмся, как считывать информацию из консоли Консоль – это стандартный поток ввода-вывода. Чтобы читать данные из консоли, мы воспользуемся двумя разными классами из стандартной библиотеки Java.

Способ 1: Чтение из консоли с помощью System.in.read

Простейший способ чтения данных из консоли – это метод System.in.read(). Данный метод позволяет считывать данные по одному коду. Это блокирующий метод, то есть, вызвав его, выполнение программы продолжится только тогда, когда будет введён какой-либо символ в консоль:

int code = System.in.read(); char c = (char) code; System.out.println("Вы ввели: " + c + ", код символа: " + code);

Это очень простой способ чтения из консоли и есть более удобные способы чтения.

Способ 2: Чтение из консоли с помощью Scanner

Класс java.util.Scanner предоставляет несколько удобных методов для чтения из консоли:

  • hasNextInt() – вернёт true, если из консоли сейчас возможно вычитать целое число
  • nextInt() – вычитает целое число из консоли
  • hasNextDouble() – вернёт true, если из консоли сейчас возможно вычитать число типа double
  • nextDouble() – вычитает вещественное число из консоли
  • hasNextLine() – вернёт true, если из консоли возможно считать какие-либо символы
  • nextLine() – вычитывает строку из консоли

Все эти методы являются блокирующими.

В данном примере мы проверяем, доступно ли в консоли целое число и если да, то снова выводим его в консоль:

Scanner scanner = new Scanner(System.in); System.out.print(«Введите целое число: «); if (scanner.hasNextInt()) < int i = scanner.nextInt(); System.out.println(i); >else

Аналогично используются методы hasNextDouble()/nextDouble() для вещественных чисел и методы hasNextLine()/nextLine() для строк.

Заключение

В данной статье мы разобрались, как вычитывать данные из стандартного потока вывода. Теперь вы знаете, как вычитать из консоли числа, символы и строки.

Исходный код

import java.io.IOException; public class ReadFromConsoleIn < public static void main(String[] args) throws IOException < int code = System.in.read(); char c = (char) code; System.out.println("Вы ввели: " + c + ", код символа: " + code); >>
public class ReadFromConsoleScanner < public static void main(String[] args) < Scanner scanner = new Scanner(System.in); System.out.print("Введите целое число: "); if (scanner.hasNextInt()) < int i = scanner.nextInt(); System.out.println(i); >else < System.out.println("Вы ввели не целое число"); >> >

Источник

Считать строку чисел java

Наиболее простой способ взаимодействия с пользователем представляет консоль: мы можем выводить на консоль некоторую информацию или, наоборот, считывать с консоли некоторые данные. Для взаимодействия с консолью в Java применяется класс System , а его функциональность собственно обеспечивает консольный ввод и вывод.

Вывод на консоль

Для создания потока вывода в класс System определен объект out . В этом объекте определен метод println , который позволяет вывести на консоль некоторое значение с последующим переводом курсора консоли на следующую строку. Например:

Читайте также:  Class in php manual

В метод println передается любое значение, как правило, строка, которое надо вывести на консоль. И в данном случае мы получим следующий вывод:

При необходимости можно и не переводить курсор на следующую строку. В этом случае можно использовать метод System.out.print() , который аналогичен println за тем исключением, что не осуществляет перевода на следующую строку.

Консольный вывод данной программы:

Но с помощью метода System.out.print также можно осуществить перевод каретки на следующую строку. Для этого надо использовать escape-последовательность \n:

System.out.print("Hello world \n");

Нередко необходимо подставлять в строку какие-нибудь данные. Например, у нас есть два числа, и мы хотим вывести их значения на экран. В этом случае мы можем, например, написать так:

public class Program < public static void main(String[] args) < int x=5; int y=6; System.out.println("x=" + x + "; y console"> 
x=5; y=6

Но в Java есть также функция для форматированного вывода, унаследованная от языка С: System.out.printf() . С ее помощью мы можем переписать предыдущий пример следующим образом:

int x=5; int y=6; System.out.printf("x=%d; y=%d \n", x, y);

В данном случае символы %d обозначают спецификатор, вместо которого подставляет один из аргументов. Спецификаторов и соответствующих им аргументов может быть множество. В данном случае у нас только два аргумента, поэтому вместо первого %d подставляет значение переменной x, а вместо второго - значение переменной y. Сама буква d означает, что данный спецификатор будет использоваться для вывода целочисленных значений.

Кроме спецификатора %d мы можем использовать еще ряд спецификаторов для других типов данных:

  • %x : для вывода шестнадцатеричных чисел
  • %f : для вывода чисел с плавающей точкой
  • %e : для вывода чисел в экспоненциальной форме, например, 1.3e+01
  • %c : для вывода одиночного символа
  • %s : для вывода строковых значений

При выводе чисел с плавающей точкой мы можем указать количество знаков после запятой, для этого используем спецификатор на %.2f , где .2 указывает, что после запятой будет два знака. В итоге мы получим следующий вывод:

Name: Tom Age: 30 Height: 1,70

Ввод с консоли

Для получения ввода с консоли в классе System определен объект in . Однако непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner , который, в свою очередь использует System.in . Например, напишем маленькую программу, которая осуществляет ввод чисел:

import java.util.Scanner; public class Program < public static void main(String[] args) < Scanner in = new Scanner(System.in); System.out.print("Input a number: "); int num = in.nextInt(); System.out.printf("Your number: %d \n", num); in.close(); >>

Так как класс Scanner находится в пакете java.util , то мы вначале его импортируем с помощью инструкции import java.util.Scanner .

Для создания самого объекта Scanner в его конструктор передается объект System.in . После этого мы можем получать вводимые значения. Например, в данном случае вначале выводим приглашение к вводу и затем получаем вводимое число в переменную num.

Чтобы получить введенное число, используется метод in.nextInt(); , который возвращает введенное с клавиатуры целочисленное значение.

Input a number: 5 Your number: 5

Класс Scanner имеет еще ряд методов, которые позволяют получить введенные пользователем значения:

  • next() : считывает введенную строку до первого пробела
  • nextLine() : считывает всю введенную строку
  • nextInt() : считывает введенное число int
  • nextDouble() : считывает введенное число double
  • nextBoolean() : считывает значение boolean
  • nextByte() : считывает введенное число byte
  • nextFloat() : считывает введенное число float
  • nextShort() : считывает введенное число short

То есть для ввода значений каждого примитивного типа в классе Scanner определен свой метод.

Например, создадим программу для ввода информации о человеке:

import java.util.Scanner; public class Program < public static void main(String[] args) < Scanner in = new Scanner(System.in); System.out.print("Input name: "); String name = in.nextLine(); System.out.print("Input age: "); int age = in.nextInt(); System.out.print("Input height: "); float height = in.nextFloat(); System.out.printf("Name: %s Age: %d Height: %.2f \n", name, age, height); in.close(); >>

Здесь последовательно вводятся данные типов String, int, float и потом все введенные данные вместе выводятся на консоль. Пример работы программы:

Input name: Tom Input age: 34 Input height: 1,7 Name: Tom Age: 34 Height: 1,70

Обратите внимание, что для ввода значения типа float (то же самое относится к типу double) применяется число "1,7", где разделителем является запятая, а не "1.7", где разделителем является точка. В данном случае все зависит от текущей языковой локализации системы. В моем случае русскоязычная локализация, соответственно вводить необходимо числа, где разделителем является запятая. То же самое касается многих других локализаций, например, немецкой, французской и т.д., где применяется запятая.

Источник

Ввод данных в консоли 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)

Пока поток ввода содержит данные, а метод 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())

Таким образом в Java обеспечивается безопасность получения данных по отношению к несоответствию типов.

Что ж, ввести данные в консоль Java не так уж и сложно, особенно, если вы используете Scanner. На этом пока всё, следите за новостями!

Источник

Оцените статью