Клас Scanner в Java: Опис, методи, приклади

Клас Scanner в Java

Клас Scanner в Java дозволяє зчитувати дані з різних джерел. У тому числі з консолі. Сьогодні я хочу показати на прикладі як можна прочитати введення даних від користувача в Java програму.

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

Давайте тепер подивимося, як його можна використовувати, щоб зчитати користувацький ввід з консолі та передати дані у програму.

Припустимо, у нас є додаток, в якому спершу користувачу потрібно ввести числа, а потім текст. Ось що у мене вийшло:

import java.util.Scanner;

public class Test {

   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);

       System.out.println("Введіть свій вік");
       int age = scanner.nextInt();
       System.out.println("Введіть своє ім'я");
       String name = scanner.next();//тут також можна використовувати
       //scanner.nextLine(), але з застереженням, що nextLine()
       // сприймає натискання Enter як новий рядок
       // отже, якщо ви хочете використовувати scanner.nextLine() тут, його потрібно викликати двічі
       //scanner.nextLine();
       //String name = scanner.nextLine();
       if (age < 18) {
           System.out.println(name + " ця сторінка тільки для дорослих");
       } else {
           System.out.println("Ласкаво просимо до програми, " + name);
       }
   }
}

Під час запуску програми:

Введіть свій вік
25
Введіть своє ім'я
Іван
Ласкаво просимо до програми, Іван

Як бачите, код досить простий. Щоб викликати методи класу Scanner, достатньо просто написати Scanner scanner = new Scanner(System.in);.

Усередині дужок (System.in) я передав систему in, оскільки я хочу, щоб мій сканер зчитував дані з консолі.

Для зчитування даних з файлу потрібно просто передати new File("шлях_до_файлу") у дужки.

У корені проекту я створив текстовий файл test.txt з таким змістом:

Це мій текстовий файл
Я зчитую його за допомогою сканера

Ось моя програма, яка зчитує рядок з файлу за допомогою класу Scanner:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Test {

   public static void main(String[] args) throws FileNotFoundException {
       Scanner scanner = new Scanner(new File("test.txt"));

       String textFromFile = scanner.nextLine();
       System.out.println(textFromFile);
   }
}

Якщо потрібно зчитати з файлу більше одного рядка, тут вже не обійтися без циклів. Якщо ви ще не знайомі з цією конструкцією, цю частину статті можна пропустити і перейти до неї після вивчення циклів.

У класі Scanner є метод hasNextLine(), який повертає true/false, в залежності від того, чи є ще рядки в файлі. Використовуючи цей метод та цикл, можна зчитати весь файл рядок за рядком:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Test {

   public static void main(String[] args) throws FileNotFoundException {
       Scanner scanner = new Scanner(new File("test.txt"));

       while (scanner.hasNextLine()){
           String textFromFile = scanner.nextLine();
           System.out.println(textFromFile);
       }
   }
}

Отже, результат роботи програми:

Це мій текстовий файл
Я зчитую його за допомогою сканера

Крім того, програму вище можна трохи оптимізувати та додавати прочитані рядки до одного рядка, а потім можна вивести все разом. Або можна якось по іншому обробити рядок.

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Test {

   public static void main(String[] args) throws FileNotFoundException {
       Scanner scanner = new Scanner(new File("test.txt"));

       String fullTextFile = "";//замість String тут краще використовувати StringBuilder
       //я навмисно використав тут String, оскільки думаю, що більшість читачів ще не знайомі
       //з класом StringBuilder
       while (scanner.hasNextLine()){
           fullTextFile =  fullTextFile + "\n" + scanner.nextLine();
           //тут конструкція "\n" - це перехід на новий рядок
           //можна будь-яким чином конкатенувати рядки. Замість переходу на новий рядок можна використовувати кому
           //або взагалі нічого не використовувати. Тоді вивід буде одним рядком
       }
       System.out.println(fullTextFile);
   }
}

Отже, це все, що я хотів розповісти про клас Scanner. Він стане зручним інструментом для зчитування даних з консолі або файлу, щоб створювати базові інтерактивні додатки на мові Java.

Я спеціально не став описувати інші методи сканера, оскільки думаю, що для початківців цього буде достатньо. Все інше ви зможете подивитися при безпосередньому використанні Scanner.

Втомився вчити Java сам?

Переглянь нашу сторінку з курсами! Можливо щось сподобається 😉

Останні записи


Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *


Категорії