Класс 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("Enter your age");
       int age = scanner.nextInt();
       System.out.println("Enter your name");
       String name = scanner.next();//здесь также можно использовать
       //scanner.nextLine() но с оговоркой что nextLine()
       // считает нажатие ентера за новую строку
       //поэтому если хотите здесь использовать scanner.nextLine() его нужно вызвать дважды
       //scanner.nextLine();
       //String name = scanner.nextLine();
       if (age < 18) {
           System.out.println(name + " this page is adults only");
       } else {
           System.out.println("Welcome to the application " + name);
       }
   }
}

В результате запуска приложения: 

Как видите, код довольно простой. Чтобы вызвать методы класса Scanner нужно всего лишь написать Scanner scanner = new Scanner(System.in);

Внутри скобок (System.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.

Чтобы не пропустить выход новых статей не забудьте подписаться на наш телеграм канал: https://t.me/java_master

3 thoughts on “Класс Scanner в Java: Описание, методы, примеры”

  1. Доброго времени суток!

    И что же – Scanner никто не собирается закрывать?! О данном методе нужно обязательно рассказать сразу!

    1. Здравствуйте!
      Зачем?
      Эта статья расчитана на людей, которые только открыли для себя мир программирования и Java. Для них главная задача написать приложение где можно ввести данные и увидеть как эти данные “попали в программу”. Как правило сканер используют в приложениях, которые сразу же завершают свою работу. После завершения работы приложения – оперативная память будет освобождена и ничего страшного не произойдет.
      Неужели Вы думаете что эту статью будут читать люди которые пишут большие ентерпрайз приложения, которым срочно нужен сканер?)
      Для новичков же добавление закрытие сканера – это усложнение и так не простого материала. Java и так является сложным для вхождения языком программирования и усложнять простую тему я не вижу смысла.

  2. считывает и возвращает введенное число. В нашей программе он используется для того, чтобы присвоить значение переменной Введите число: JavaRush Exception in thread “main” java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at Main.main(Main.java:10) Process finished with exit code 1

Leave a Comment

Your email address will not be published.