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

Как работать с классом Scanner в Java: примеры

Андрій Денисенко

С помощью класса java.util.Scanner можно анализировать простые типы данных и строки. Этот класс принимает данные из файлов, потоков, строк, последовательностей символов или байтов.

Входные данные разбиваются на токены. По умолчанию разделителем токенов служит пробел, но его можно заменить строкой (java.lang.String) или регулярным выражением (java.util.regex.Pattern).

Для создания сканера используется конструктор Scanner, которому передаются входные данные и при необходимости тип кодировки.

Давайте рассмотрим конструкторы этого класса по порядку.

Конструктор public Scanner(Readable source)

Создает сканер, с помощью которого можно получить значения из источника, реализующего интерфейс Readable. Это могут быть объекты классов:

  • BufferedReader;
  • CharArrayReader;
  • CharBuffer;
  • FileReader;
  • FilterReader;
  • InputStreamReader;
  • LineNumberReader;
  • PipedReader;
  • PushbackReader;
  • Reader;
  • StringReader.

Вот как это делается с помощью класса FileReader:

FileReader reader = new FileReader(new File("D:\Scanner.txt"));

Scanner scanner = new Scanner(reader);

Конструктор public Scanner(InputStream source)

Этот конструктор создает сканер, с помощью которого можно получить значения из указанного входного потока. Байты из такого потока преобразуются в символы (с использованием набора символов по умолчанию для базовой платформы).

Также есть вариант конструктора, который позволяет получать значения из входного потока, преобразовывая байты в символы с использованием набора символов, указанного пользователем:

public Scanner(InputStream source, String charsetName)

Если указанный набор символов не существует, выбрасывается исключительная ситуация IllegalArgumentException. Это справедливо для всех вариантов методов с указанием аргумента charsetName.

Например, для потока стандартного ввода он объявляется просто:

Scanner scanner = new Scanner(System.in)

Конструктор public Scanner(File source) throws FileNotFoundException

Создает сканер, который позволяет получать значения из указанного объекта класса java.io.File. Если указанный файл не найден, возникает исключительная ситуация FileNotFoundException. Символы преобразовываются в байты с использованием набора символов по умолчанию для базовой платформы.

Чтобы использовать произвольный набор символов, укажите его во втором аргументе:

public Scanner(File source, String charsetName) throws FileNotFoundException

Например:

Scanner scanner = new Scanner(new File("D:\Scanner.txt"));

Конструктор public Scanner(Path source) throws IOException

Создает сканер, который позволяет получать значения из указанного объекта, реализующего интерфейс java.nio.file.Path. При ошибке ввода-вывода возникает исключительная ситуация IOException. Символы преобразовываются в байты с использованием набора символов по умолчанию для базовой платформы.

Для использования другого набора символов укажите его во втором аргументе:

public Scanner(Path source, String charsetName) throws IOException

Давайте создадим сканер с помощью пути:

String fileName = "D:\Scanner.txt";

Path path = Paths.get(fileName);

Scanner scanner = new Scanner(path);

Конструктор public Scanner(String source)

Создает сканер, который позволяет получать значения из указанной строки:

Scanner scanner = new Scanner("Parse me");

Как прочитать файл с помощью класса Scanner

Чтобы прочитать файл с помощью класса Scanner, воспользуемся конструктором, принимающим объект класса java.io.File, и методами nextLine() и hasNextLine():

import java.util.Scanner;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

public class FileScanner{

  public static void main(String []args){

     try{

         FileReader reader = new FileReader(new File("Scanner.txt"));

         Scanner scanner = new Scanner(reader);

            while(scanner.hasNextLine()){

             String line = scanner.nextLine();

                System.out.println(line);
         }

     } catch(FileNotFoundException ex){

            System.out.println("File not found");
     }
  }
}

Как прочитать ввод из консоли с помощью класса Scanner

Чтобы прочитать данные из консоли, создадим входной поток System.in и используем метод nextLine():

import java.util.Scanner;

public class ConsoleScanner{

  public static void main(String []args){

     Scanner scanner = new Scanner(System.in);

     String line = scanner.nextLine();

        System.out.println(line);
  }
}

Методы класса Scanner

Тип возврата Метод Описание
void close() Закрывает объект сканера.
Pattern delimiter() Возвращает шаблон, который объект Scanner в настоящее время использует для сопоставления разделителей.
String findlnLine(Pattern pattern) Этот метод возвращает объект String, который удовлетворяет объекту Pattern, указанному в качестве аргумента метода.
String findlnLine(String pattern) Пытается найти следующее вхождение шаблона, созданного из указанной строки, игнорируя разделители.
String findWithinHorizon(Pattern pattern, int horizon) Ищет следующее вхождение указанного шаблона.
String findWithinHorizon(String pattern, int horizon) Ищет следующее вхождение шаблона ввода, игнорируя разделитель
boolean hasNext() Возвращает true, если у этого сканера есть другой токен на входе.
boolean hasNext(Pattern pattern) Возвращает true, если следующий полный токен соответствует указанному шаблону.
boolean hasNext(String pattern) Возвращает true, если следующий токен соответствует шаблону, созданному из указанной строки.
boolean hasNextBig Decimal() Возвращает true, если следующий токен на входе этого сканера можно интерпретировать как BigDecimal с помощью метода nextBigDecimal().

 Подробнее о сканере можно прочитать на сайте документации по Java.

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

Всегда перед глазами: 15 лучших тем VS Code на 2026 год

Visual Code от Microsoft, вероятно, один из самых популярных редакторов кода. Разработчики любят его за…

22.02.2026

Киберпанк по-японски: 9 лучших аниме в жанре «технологии нас погубят»

Япония сама по себе — сплошной киберпанк. Это заметил даже культовый писатель жанра Уильям Гибсон,…

21.02.2026

Не просто коробка с бантом. Как оригинально подарить гаджет: 5 незатратных способов

Сам по себе телефон Айфон 17 Про Макс – отличный подарок. У него красивая заводская…

12.02.2026

Лучшие криптобиржи для криптозаймов в 2025 году: где лучше брать кредит под крипту?

На фоне роста спроса на ликвидность в бычьем рынке 2025 года, криптозаймы снова выходят на…

09.07.2025

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024