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

Понравилась статья? Поделиться с друзьями:
Комментарии: 3
  1. Juris

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

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

    1. Denys (автор)

      Здравствуйте!
      Зачем?
      Эта статья расчитана на людей, которые только открыли для себя мир программирования и 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

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: