Форматируем вывод чисел в Java. Диалоговые окна JOptionPane Конструкторы окна выбора showInputDialog

Последнее обновление: 27.10.2018

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

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

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

Public class Program { public static void main(String args) { System.out.println("Hello world!"); System.out.println("Bye world..."); } }

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

Hello world! Bye world...

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

Public class Program { public static void main(String args) { System.out.print("Hello world!"); System.out.print("Bye world..."); } }

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

Hello world!Bye world...

Но с помощью метода 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=" + y); } }

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

Но в 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 : для вывода строковых значений

Например:

Public class Program { public static void main(String args) { String name = "Tom"; int age = 30; float height = 1.7f; System.out.printf("Name: %s Age: %d Height: %.2f \n", name, age, height); } }

При выводе чисел с плавающей точкой мы можем указать количество знаков после запятой, для этого используем спецификатор на %.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", где разделителем является точка. В данном случае все зависит от текущей языковой локализации системы. В моем случае русскоязычная локализация, соответственно вводить необходимо числа, где разделителем является запятая. То же самое касается многих других локализаций, например, немецкой, французской и т.д., где применяется запятая.

Библиотека Swing включает богатый выбор стандартных диалоговых окон, существенно упрощающих и ускоряющих вывод простой информации типа сообщений о работе программы, ошибках и нестандартных ситуациях. Для вывода в графический интерфейс приложения разнообразной информации и выбора простых данных предназначен класс JOptionPane , работа с которым связана с вызовом одного из многочисленных статических методов, создающих и выводящих на экран модальное диалоговое окно стандартного вида. В диалоговых окнах JOptionPane можно выводить самую разнообразную информацию и, при необходимости, размещать в них дополнительные компоненты.

JOptionPane унаследован от базового класса JComponent библиотеки Swing, так что можно работать с ним напрямую, т.е. создавать экземпляры класса JOptionPane и настраивать их свойства. Использование стандартных диалоговых окон существенно упрощает разработку приложения и позволяет ускорить процесс освоения пользователем интерфейса.

Все стандартные диалоговые окна Swing имеют собственные UI-представители, отвечающие за интерфейс окна в используемом приложении. Это особенно важно для внешних видов окон, имитирующих известные платформы, пользователи которых не должны ощущать значительной разницы при переходе от «родных» приложений к Java-приложениям.

Класс JOptionPane

Интерфейс экземпляра класса JOptionPane имеет структуру, представленную на следующем рисунке. Иконка в интерфейсе может отсутствовать.

Основные диалоговые методы JOptionPane

Конструкторы окна сообщений showMessageDialog

// Простое диалоговое окно с заголовком «Message» public static void showMessageDialog(Component parent, Object message) throws HeadlessException // Диалоговое окно с заголовком и типом сообщения public static void showMessageDialog(Component parent, Object message, String title, int messageType) throws HeadlessException // Диалоговое окно с заголовком, типом сообщения и иконкой public static void showMessageDialog(Component parent, Object message, String title, int messageType, Icon icon) throws HeadlessException

Конструкторы окна подтверждения showConfirmDialog

// Простое диалоговое окно подтверждения с кнопками Yes, No, Cancel и // с заголовком «Select an Option» public static void showConfirmDialog(Component parent, Object message) throws HeadlessException // Окно подтверждения с заголовком и кнопками, определенными // опцией optionType public static void showConfirmDialog(Component parent, Object message, String title, int optionType) throws HeadlessException // Окно подтверждения с заголовком, кнопками, определенными // опцией optionType, и иконкой public static void showConfirmDialog(Component parent, Object message, String title, int optionType, Icon icon) throws HeadlessException

Конструкторы окна выбора showInputDialog

// Диалоговое окно с полем ввода public static void showInputDialog(Component parent, Object message) throws HeadlessException // Диалоговое окно с полем ввода, инициализируемое initialSelectionValue public static void showInputDialog(Component parent, Object message, Object initialSelectionValue) throws HeadlessException // Диалоговое окно с полем выбора из списка selectionValues public static void showInputDialog(Component parent, Object message, String title, int messageType, Icon icon, Object selectionValues, Object initialSelectionValue) throws HeadlessException

parent - родительское окно.

message - отображаемый в окне текст сообщения. В большинстве случаев это строка, но может быть использован массив строк String, компонент Component, иконка Icon, представленная меткой JLabel, объект Object, конвертируемый в строку методом toString().

title - заголовок окна.

messageType - тип диалогового окна:

  • INFORMATION_MESSAGE - стандартное диалоговое окно для вывода информации со значком соответствующего вида;
  • WARNING_MESSAGE - стандартное диалоговое окно для вывода предупреждающей информации со значком соответствующего вида;
  • QUESTION_MESSAGE - стандартное диалоговое окно для вывода информации. Как правило, не используется для информационных сообщений;
  • ERROR_MESSAGE - стандартное диалоговое окно для вывода информации об ошибке со значком соответствующего вида;
  • PLAIN_MESSAGE - стандартное диалоговое окно для вывода информации без значка.

optionType - опция определения кнопок управления:

  • DEFAULT_OPTION
  • YES_NO_OPTION
  • YES_NO_CANCEL_OPTION
  • OK_CANCEL_OPTION

selectionValues - список возможных значений. В диалоговом окне InputDialog список будет представлен в компоненте JComboBox или JList. Если selectionValues = null, то в окне будет определено поле JTextField, в которое пользователь может ввести любое значение.

initialSelectionValue - инициализируемое значение.

icon - отображаемая в диалоговом окне иконка.

Локализация кнопок JOptionPane

Кнопки управления, как правило, имеют заголовки «Yes», «No», «Cancel». Для локализации кнопок диалогового компонента JOptionPane можно использовать UIManager следующим образом:

UIManager.put("OptionPane.yesButtonText" , "Да"); UIManager.put("OptionPane.noButtonText" , "Нет"); UIManager.put("OptionPane.cancelButtonText", "Отмена"); UIManager.put("OptionPane.okButtonText" , "Готово");

Пример использования JOptionPane

Пример JOptionPaneTest.java включает использование всех типов диалоговых окон JOptionPane . В интерфейсе окна, представленном на следующем скриншоте, размещаются кнопки, по нажатию на которые формируются соответствующие диалоговые окна JOptionPane .


Листинг примера JOptionPane

// Пример использования диалоговых окон JOptionPane import javax.swing.*; import java.awt.event.*; public class JOptionPaneTest extends JFrame { private JPanel contents = null; private JButton btnMessage1 = null; private JButton btnMessage2 = null; private JButton btnMessage3 = null; private JButton btnConfirm1 = null; private JButton btnConfirm2 = null; private JButton btnConfirm3 = null; private JButton btnInput1 = null; private JButton btnInput2 = null; private JButton btnInput3 = null; private ImageIcon icon = null; private final String TITLE_message = "Окно сообщения"; private final String TITLE_confirm = "Окно подтверждения"; private String drink = {"Сок", "Минералка", "Лимонад" , "Пиво"}; public JOptionPaneTest() { super("Пример использования JOptionPane"); setDefaultCloseOperation(EXIT_ON_CLOSE); // Локализация кнопок UIManager.put("OptionPane.yesButtonText" , "Да"); UIManager.put("OptionPane.noButtonText" , "Нет"); UIManager.put("OptionPane.cancelButtonText", "Отмена"); contents = new JPanel(); // Иконка для отображения в окне сообщений icon = new ImageIcon("images/warning.png"); // Кнопка формирования окна по 2-м параметрам btnMessage1 = new JButton("MessageDialog 2"); // Кнопка формирования окна по 4-м параметрам btnMessage2 = new JButton("MessageDialog 4"); // Кнопка формирования окна по 5-и параметрам btnMessage3 = new JButton("MessageDialog 5"); // Кнопки вывода сообщений подтверждения btnConfirm1 = new JButton("ConfirmDialog 4+2"); btnConfirm2 = new JButton("ConfirmDialog 5"); btnConfirm3 = new JButton("ConfirmDialog 6"); btnInput1 = new JButton("InputDialog 2+3"); btnInput2 = new JButton("InputDialog 4"); btnInput3 = new JButton("InputDialog 7"); addMessageListeners(); addConfirmListeners(); addInputListeners (); // Размещение кнопок в интерфейсе contents.add(btnMessage1); contents.add(btnMessage2); contents.add(btnMessage3); contents.add(btnConfirm1); contents.add(btnConfirm2); contents.add(btnConfirm3); contents.add(btnInput1); contents.add(btnInput2); contents.add(btnInput3); setContentPane(contents); // Вывод окна на экран setSize(500, 140); setVisible(true); } }

В методах addMessageListeners() , addConfirmListeners() , addInputListeners() определяются слушатели, обрабатывающие нажатие соответствующих кнопок.

Окна вывода сообщений MessageDialog

Листинг процедуры создания слушателей, формирующие диалоговые окна вывода сообщений.

Private void addMessageListeners() { btnMessage1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(JOptionPaneTest.this, "

Текст

в виде разметки HTML"); } }); btnMessage2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(JOptionPaneTest.this, new String {"Сообщение в виде массива строк:", " - первая строка", " - вторая строка"}, TITLE_message, JOptionPane.ERROR_MESSAGE); } }); btnMessage3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Включение в интерфейс иконки JOptionPane.showMessageDialog(JOptionPaneTest.this, "Использование изображения в окне сообщений", TITLE_message, JOptionPane.INFORMATION_MESSAGE, icon); } }); }

1. Интерфейс окна вывода сообщений по нажатию на кнопку btnMessage1 . Конструктор получает 2 параметра: родитель и текст сообщения. В заголовок подставляется значение «Message». Текст сообщения имеет HTML разметку.

2. Интерфейс окна вывода сообщений по нажатию на кнопку btnMessage2 . Конструктор получает 4 параметра: родитель, текст сообщения в виде массива строк, строку заголовка окна и тип сообщения.

3. Интерфейс окна вывода сообщений по нажатию на кнопку btnMessage2 . Конструктор получает 5 параметров: родитель, текст сообщения, строку заголовка окна, тип сообщения и иконку.

Диалоговые окна подтверждений ConfirmDialog

Листинг процедуры создания слушателей, формирующие диалоговые окна подтверждений.

Private void addConfirmListeners() { btnConfirm1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Окно подтверждения c 4-мя параметрами int result = JOptionPane.showConfirmDialog(JOptionPaneTest.this, "Вам это нужно?", TITLE_confirm, JOptionPane.YES_NO_CANCEL_OPTION); // Окна подтверждения c 2-мя параметрами if (result == JOptionPane.YES_OPTION) JOptionPane.showConfirmDialog(JOptionPaneTest.this, "Вы не отказываетесь?"); else if (result == JOptionPane.NO_OPTION) JOptionPane.showConfirmDialog(JOptionPaneTest.this, "Вы отказались?"); } }); btnConfirm2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showConfirmDialog(JOptionPaneTest.this, "Вы не отказываетесь?", TITLE_confirm, JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); }}); btnConfirm3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showConfirmDialog(JOptionPaneTest.this, "Вам нравится значок?", TITLE_confirm, JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE, icon); }}); }

1. Интерфейс окна подтверждения по нажатию на кнопку btnConfirm1 . Конструктор получает 4 параметра: родитель, текст сообщения, строка заголовка и опция кнопок управления

В зависимости от нажатой кнопки открываются следующее окно подтверждение (одно из окон на следующем скриншот), конструктор которого получает 2 параметра. Текст заголовка имеет значение по умолчанию «Select an Option».

2. Интерфейс окна подтверждения по нажатию на кнопку btnConfirm2 . Конструктор получает 5 параметров: родитель, текст сообщения, строка заголовка, опция кнопок управления и тип сообщения.

3. Интерфейс окна подтверждения по нажатию на кнопку btnConfirm3 . Конструктор получает 6 параметров: родитель, текст сообщения, строка заголовка, опция кнопок управления, тип сообщения и иконка.

Диалоговые окна выбора данных InputDialog

Листинг процедуры создания слушателей, формирующие диалоговые окна выбора

Private void addInputListeners() { btnInput1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Диалоговое окно ввода данных: родитель, HTML сообщение String result = JOptionPane.showInputDialog(JOptionPaneTest.this, "

Добро пожаловать"); JOptionPane.showInputDialog(JOptionPaneTest.this, "Вы ответили", result); } }); btnInput2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Диалоговое окно ввода данных: родитель, сообщение в виде // массива строк, тип диалогового окна (иконки) JOptionPane.showInputDialog(JOptionPaneTest.this, new String {"Неверно введен пароль!", "Повторите пароль:"}, "Авторизация", JOptionPane.WARNING_MESSAGE); } }); btnInput3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Диалоговое окно ввода данных Object result = JOptionPane.showInputDialog(JOptionPaneTest.this, "Выберите любимый напиток:", "Выбор напитка", JOptionPane.QUESTION_MESSAGE, icon, drink, drink); // Диалоговое окно вывода сообщения JOptionPane.showMessageDialog(JOptionPaneTest.this, result); } }); }

1. Интерфейс окна ввода данных по нажатию на кнопку btnInput1 представлен на скриншоте слева. Конструктор получает 2 параметра: родитель и текст сообщения с разметкой HTML. После ввода значения и нажатия на одну из клавиш открывается окно, представленное на скриншоте справа.

2. На следующем скриншоте представлен интерфейс окна ввода данных, создаваемое конструктором, которому в качестве текста передается родитель, текстовое сообщение в виде массива строк, строка заголовка и тип диалогового окна (иконки).

3. Интерфейс окна ввода данных по нажатию на кнопку btnInput3 представлен на следующем скриншоте слева. Конструктор получает все возможные параметры: родитель, текстовое сообщение, строка заголовка, тип диалогового окна, иконка, массив строк и выделенное значение по умолчанию. В диалоговом окне возможные значения представлены в компоненте выпадающего списка. После выбора значения и нажатия на одну из клавиш открывается окно вывода сообщения, представленное на скриншоте справа.

Скачать примеры

Исходные коды примеров, рассмотренных на странице, можно (2.25 Кб).

Есть много особенностей, про которые желательно знать, программируя на Java, даже если Вы начинающий программист. Под катом я расскажу как вывести кириллические символы в консоль Windows и наглядно это продемонстрирую.
Начнем с простого.

Базовые типы

Их в Java 8:

  • boolean;
  • byte, char, short, int, long;
  • float, double.

Char - это символьный тип данных. Переменная такого типа занимает 2 байта памяти, так как хранится в кодировке unicode.
С переменными этого типа можно производить только операции присваивания, но зато различными способами. Самый простой из них выглядит так:
c = "b";
Символ можно представить также в виде его кода, записанного в восьмеричной системе счисления:
c = "\077";
Где 077 – это обязательно трехзначное число, не большее чем 377 (=255 в десятичной системе счисления).
Или же в шестнадцатеричной системе счисления следующим образом:
c = "\u12a4";
Кроме того, существуют специальные символы, такие как знак абзаца, разрыв страницы и др. Знак абзаца запишется, например, так:
c = "\n";
Не нужно перечислять их здесь. При необходимости всегда можно заглянуть в справочник.

Теперь внимание. Кодировкой по-умолчанию среды программирования Java является Latin-1. Однако, при выводе в поток System.out символы преобразуются в кодировку по умолчанию для операционной системы. Так для русскоязычной локализации кодировкой по-умолчанию является Windows-1251, для linux таковой будет UTF-8. Однако по задумке Microsoft решили для консоли Windows использовать кодировку Cp866.

Соответственно вывод: для корректного отображения кириллических символов в консоли нужно выводить символы в кодировке Cp866!

Это можно сделать следующим способом:

Import java.io.PrintStream;
import java.io.UnsupportedEncodingException;

Public class Hello {
public static void main(String args) throws UnsupportedEncodingException { /*Может возникнуть исключение типа UnsupportedEncodingException*/
String x = "Привет, мир!!!"; //Это строка, которую мы будем выводить на экран
PrintStream printStream = new PrintStream(System.out, true, "cp866");
/*Создаем новый поток вывода, который будет автоматически преобразоввывать символы в кодировку Cp866*/
printStream.println(x);
}
}
Сохраним полученный код в файл Hello.java. Далее создадим Hello.bat файл следующего содержания:
javac Hello.java
java -cp . Hello
pause
И поместим его в одну папку с файлом Hello.java. Должно получиться примерно так:

Далее запускаем полученный Hello.bat файл и вуаля, у нас образовался файл Hello.class в той же директории а на экран вывелось сообщение «Привет, мир!!!» в кодировке Cp866.

Для того, чтобы узнать, какая кодировка в данный момент используется в консоли нужно набрать там «chcp». А для того, чтобы поменять кодировку консоли, нужно набрать «chcp <номер кодовой таблицы>» например «chcp 1251». Продемонстрирую использование этой команды:

Замечание: если у Вас не находит команду javac, то заходим (для Windows 7) «Мой компьютер» - «Свойства» - «Дополнительные параметры системы» - «Переменные среды», находим «Системные переменные» и в переменную Path добавляем строку, куда установлена JDK, например «C:\Program Files\Java\jdk1.7.0_25\bin» - по умолчанию.

Эта статья адресована в первую очередь начинающим Java программистам.

Обычно вывод данных на консоль трудностей не представляет с System.out.print или System.out.println, как правило, справляются все. Но когда же дело доходит до ввода данных возникают трудности.

Виной тому неудобная и сложная для восприятия реализация консольного ввода в Java. Но тем не менее его можно освоить если изучить его работу.

Последняя строится на основе двух классов: InputStream (System.in) и Scanner.

Ввод с использованием 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("Ошибка"); }

int inChar ;

String s = "" ;

try {

while (System . in . available () > 0 ) {

s += (char ) inChar ;

inChar = System . in . read () ;

} catch (IOException e ) {

System . out . println ("Ошибка" ) ;

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

На этом неудобства данного подхода не заканчиваются потому, что мы всегда получаем данные в строковом формате. Если же нам требуется ввести, допустим, целое число? Тогда нам придётся дополнить вышеприведённый пример приведением типов с соответствующей проверкой.

Поэтому для получения данных от пользователя в консольных приложениях системный поток ввода на прямую сейчас почти не используется. Вместо него предпочтительнее работать с классом Scanner.

Ввод с использованием Scanner

Класс Scanner позволяет избежать всех трудностей, связанных с использованием системного потока ввода и максимально упростить ввод данных от пользователей в консольных приложениях.

Стоит отметить, что чтением данных из консоли возможности класса Scanner не ограничиваются. Но, это уже тема для отдельной статьи.

Экземпляр класса Scanner создаётся при помощи конструктора, который принимает в качестве единственного параметра поток ввода. После этого можно сразу считывать готовые данные при помощи семейства методов с префиксом next.

Вот пример, который демонстрирует считывание введённой в консоли строки. В конструктор передаётся системный поток ввода.

Java

Scanner in = new Scanner(System.in); System.out.print("Введите строку: "); String str = in.nextLine();

Scanner in = new Scanner (System . in ) ;

System . out . print ("Введите строку: " ) ;

String str = in . nextLine () ;

Если сравнить этот пример с приведённым ранее прямым считыванием строки из системного потока ввода, то преимущество класса Scanner очевидно. Ведь нам уже не требуется вручную считывать коды символов и формировать строку в цикле. Класс Scanner самостоятельно выполняет все рутинные низкоуровневые функции, предоставляя данные, которые уже готовы к использованию в программе.

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

Так, помимо метода nextLine, существуют методы nextBoolean, nextByte, nextInt, nextDouble и другие.

Кроме того, имеется ряд методов с префиксом hasNext, которые позволяют определить тип считываемых данных. Например, hasNextLine, hasNextInt, hasNextBollean и т. д. Если в потоке ввода находятся данные соответствующего типа, эти методы возвращают true.