Ввод данных с клавиатуры в Java: способы с примерами
При работе с приложениями или сайтами, пользователям необходимо вводить свои данные: почту, пароль, день рождения и так далее. В Java применяются несколько способов ввода данных с клавиатуры: c помощью метода readLine() класса BufferedReader или метода nextLine() класса Scanner. Разберем подробнее, как работают эти методы.
Метод readLine()
BufferedReader readLine() применяется для чтения одной строки текста, который пользователь ввел с консоли. Конец строки в коде может быть указан как Enter, так и \n , \r или EOF — end of file.
BufferedReader readLIne() работает только со строками в коде. А метод Scanner nextLine() считывает и другие типы данных, например, int, long, double, float.
BufferedReader работает немного быстрее по сравнению со Scanner, потому что nextLine() анализирует данные, а readLine() просто считывает последовательность символов.
Так работает readLine():
// Java program to illustrate // BufferedReader readLine() method import java.io.*; public class GFG { public static void main(String[] args) { // Read the stream 'demo.txt' // containing text // "GEEKS" // "FOR" // "GEEKS" FileReader fileReader = new FileReader( "c:/demo.txt"); // Convert fileReader to // bufferedReader BufferedReader buffReader = new BufferedReader( fileReader); while (buffReader.ready()) { System.out.println( buffReader.readLine()); } } }
Пользователь пишет:
GEEKS FOR GEEKS
И на экран, соответственно, выводится:
GEEKS FOR GEEKS
Метод nextLine()
NextLine() в Java применяется для класса Scanner. Этот метод так же, как и readLine(), нужен для получения и чтения данных, написанных пользователем. Чтобы применить nextLine(), в коде нужно прописать объект Scanner.
Этот метод читает и воспроизводит данные до конца строки. Другими словами, он может считывать информацию до тех пор, пока не начнется новая строка или старая не будет разорвана с помощью \n или Enter.
Вот как nextLine() работает в Java:
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner("Дни бегут, мы выходим в поле,\n" + "Птицы в небе и дети в школе,\n" + "Шум и пение, тьма и свет,\n" + "Сердце новое, смерти нет"); String s = scanner.nextLine(); System.out.println(s); } }
Что пишет пользователь:
Дни бегут, мы выходим в поле Птицы в небе и дети в школе Шум и пение, тьма и свет Сердце новое, смерти нет
Что показывает программа:
Дни бегут, мы выходим в поле
Метод nextLine работает с данными только одной строки, поэтому остальное стихотворение теряется из-за разрыва между предложениями и перехода на новую строчку.
Чтобы показать стих полностью, нужно написать следующий код:
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner("Дни бегут, мы выходим в поле,\n" + "Птицы в небе и дети в школе,\n" + "Шум и пение, тьма и свет,\n" + "Сердце новое, смерти нет"); String s = scanner.nextLine(); System.out.println(s); s = scanner.nextLine(); System.out.println(s); s = scanner.nextLine(); System.out.println(s); s = scanner.nextLine(); System.out.println(s); } }
Классы-обертки в Java
Класс-обертка — это класс, объект которого содержит примитивные типы данных. Когда мы создаем объект для класса-обертки, он содержит поле, в котором мы можем хранить примитивные типы данных.
Как работают классы-обертки:
- Они преобразуют примитивные типы данных в объекты. Это необходимо, когда мы хотим изменить аргументы, передаваемые через метод (поскольку примитивные типы передаются только через value).
- В пакете java.util классы могут обрабатывать только объекты, и в этом случае помогут обертки.
- Чтобы работать в коллекциях ArrayList и Vector, потребуются объекты, а не примитивные типы.
- Классы-обертки необходимы для поддержки синхронизации в режиме многопоточности.
В коде процесс создания классов-оберток выглядят так:
// Java program to demonstrate Autoboxing import java.util.ArrayList; class Autoboxing { public static void main(String[] args) { char ch = 'a'; // Autoboxing- primitive to Character object conversion Character a = ch; ArrayList<Integer> arrayList = new ArrayList<Integer>(); // Autoboxing because ArrayList stores only objects arrayList.add(25); // printing the values from object System.out.println(arrayList.get(0)); } }
А если нужно совершить обратный процесс и преобразовать класс-обертку в примитивный тип, то придется совершить unboxing или распаковку данных:
// Java program to demonstrate Unboxing import java.util.ArrayList; class Unboxing { public static void main(String[] args) { Character ch = 'a'; // unboxing - Character object to primitive conversion char a = ch; ArrayList<Integer> arrayList = new ArrayList<Integer>(); arrayList.add(24); // unboxing because get method returns an Integer object int num = arrayList.get(0); // printing the values from primitive data types System.out.println(num); } }
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: