Клас 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.

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