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

Как работать с классом 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.

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

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023