Рубріки: Теория

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

    }

}

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023