Как создать сканер java
Это руководство по посвящено использованию класса Scanner в Java пакета java.util. Мы будем показывать базовое применение класса Scanner до самых расширенных функций этого класса, используя примеры.
Объявление:
public final class Scanner
extends Object
implements Iterator, Closeable
Создает новый сканер, который создает значения, отсканированные из указанного источника.
Это означает, что мы можем использовать любой из этих классов в Java при создании экземпляра объекта Scanner.
public Scanner(InputStream source)
Создает новый сканер, который создает значения, отсканированные из указанного входного потока. Байты из потока преобразуются в символы с использованием кодировки по умолчанию базовой платформы.
Однако мы можем использовать подклассы InputStream, как показано ниже. Мы использовали FileInputStream, поскольку он является подклассом InputStream, при его включении проблем не возникнет.
public Scanner(File source) выдает исключение FileNotFoundException
Этот конструктор очень прост. Просто требует источник файла. Единственной целью этого конструктора является создание экземпляра объекта Scanner для сканирования через файл.
public Scanner(Path source) throws IOException
public Scanner(String source)
Создает новый сканер, который выдает значения, отсканированные из указанной строки.
Этот конструктор может быть самым простым на практике, поскольку для него требуется только строковый параметр, и он строго используется для сканирования ввода строки.
Scanner в Java для чтения файлов
Считать файл очень легко, используя класс Scanner. Нам просто нужно объявить это с помощью конструктора Scanner, например:
Хитрость в итерации по токену Scanner состоит в том, чтобы применять те методы, которые начинаются с hasNext, hasNextInt и т.д. Давайте сначала остановимся на чтении файла построчно.
В приведенном выше фрагменте кода мы использовали флаг scan.hasNextLine() как средство проверки наличия токена, который в этом примере доступен на входе сканера. Метод nextLine() возвращает текущий токен и переходит к следующему.
Комбинации hasNextLine() и nextLine() широко используются для получения всех токенов на входе сканера. После этого мы вызываем метод close(), чтобы закрыть объект и тем самым избежать утечки памяти.
Считать строку из консоли ввода, используя Scanner Class
Класс Scanner принимает также InputStream для одного из своих конструкторов. Таким образом, ввод можно сделать с помощью:
После помещения в наш объект сканера, у нас теперь есть доступ к читаемому и конвертируемому потоку, что означает, что мы можем манипулировать или разбивать входные данные на токены. Используя богатый набор API сканера, мы можем читать токены в зависимости от разделителя, который мы хотим использовать в конкретном типе данных.
Важные советы
Недавно я обнаружил одну проблему. Допустим, что мы просим пользователя ввести идентификатор сотрудника и имя сотрудника из консоли.
После чего мы будем читать ввод с консоли, используя сканер. Идентификатор сотрудника будет читаться с nextInt(), а имя сотрудника будет читаться как nextLine(). Это довольно просто, но это не сработает.
Приведенный выше пример не будет работать, потому что метод nextInt не читает последний символ новой строки вашего ввода и, следовательно, эта новая строка используется при следующем вызове nextLine.
Чтобы решить эту проблему, просто используйте next вместо nextline, но если вы хотите указать только nextLine, добавьте еще один scan.nextLine() после nextInt. Посмотрите ниже фрагмент кода:
Список методов java.util.Scanner
Ниже приведен список методов java.util.Scanner, которые мы можем использовать для сложного анализа ввода.
Средняя оценка / 5. Количество голосов:
Спасибо, помогите другим - напишите комментарий, добавьте информации к статье.
С помощью класса java.util.Scanner можно анализировать простые типы данных и строки. Этот класс принимает данные из файлов, потоков, строк, последовательностей символов или байтов.
Для создания сканера используется конструктор Scanner , которому передаются входные данные и при необходимости тип кодировки.
Давайте рассмотрим конструкторы этого класса по порядку.
Конструктор public Scanner(Readable source)
Создает сканер, с помощью которого можно получить значения из источника, реализующего интерфейс Readable . Это могут быть объекты классов:
- BufferedReader;
- CharArrayReader;
- CharBuffer;
- FileReader;
- FilterReader;
- InputStreamReader;
- LineNumberReader;
- PipedReader;
- PushbackReader;
- Reader;
- StringReader.
Вот как это делается с помощью класса FileReader :
Конструктор 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
Давайте создадим сканер с помощью пути:
Конструктор public Scanner(String source)
Создает сканер, который позволяет получать значения из указанной строки:
Scanner scanner = new Scanner("Parse me");
Как прочитать файл с помощью класса Scanner
Чтобы прочитать файл с помощью класса Scanner , воспользуемся конструктором, принимающим объект класса java.io.File , и методами nextLine() и hasNextLine() :
Как прочитать ввод из консоли с помощью класса Scanner
Чтобы прочитать данные из консоли, создадим входной поток System.in и используем метод nextLine() :
Методы класса 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.
Highload нужны авторы технических текстов. Вы наш человек, если разбираетесь в разработке, знаете языки программирования и умеете просто писать о сложном!
Откликнуться на вакансию можно здесь .
Java Scanner Class
Scanner это класс в языке Java, который позволяет считывать данные из разных источников. В том числе и с консоли. Сегодня я хочу описать принципы его работы и показать на примере как можно прочитать ввод юзера в Java программу.
Класс сканер был создан для чтения данных из входящих потоков. Это может быть консоль приложения, файл и т.д.
Давайте теперь посмотрим, как его можно использовать чтобы считать пользовательский ввод с консоли и подать данные в программу.
Допустим у нас есть приложение при котором юзеру сначала нужно ввести цифры, а потом текст. Вот что получилось у меня:
В результате запуска приложения:
Как видите, код довольно простой. Чтобы вызвать методы класса Scanner нужно всего лишь написать Scanner scanner = new Scanner(System.in);
Внутри скобок (System.in); я передал систем ин так как хочу чтобы мой сканер считывал данные из консоли.
Чтобы считать данные из файла достаточно передать в скобки new File(“путь_к_файлу”).
В корне проекта я создал текстовый файл test.txt с содержимым:
Вот моя программа, которая считывает строку из файла с помощью класса Scanner:
В класс Scanner есть метод hasNextLine(), который возвращает true/false в зависимости от того есть ли еще строки в файле. Используя этот метод и цикл можно считать весь файл строка за строкой:
Мой исходный текстовый файл:
А вот результат работы приложения:
Причем программу выше можно немного оптимизировать и добавлять прочитанные строки к одной строке а потом можно вывести все целиком. Или можно как-то обработать строку в дальнейшем.
Это все что я хотел рассказать о классе Scanner. Он станет для Вас удобным инструментом для считывания данных с консоли или файла чтобы писать базовые интерактивные приложения на языке Java.
Я намеренно не стал рассказывать об остальных методах сканера, так как думаю что для новичков этого будет достаточно. Все остальное сможете посмотреть при непосредственном использовании Scanner.
Предлагаем вспомнить 2 примера из жизни, которые как нельзя кстати будут для изучения данной темы.
- Когда мы путешествуем, в аэропорту наш багаж пропускают через ленту со сканером. Вот она была наша сумка на входе. Просканировал сканер сумку и работник аэропорта четко знает что ж мы там такое везём в ней.
- Точно также работает сканнер в магазинах. Вот был штрих-код на входе, отсканировал штрих-код продавец и теперь всё-всё знает о продукте, который числится под этим штрих-кодом.
Чем то схожие задачи есть и в мире программирования на Java. Например, часто необходимо выполнить такие задачи:
- Пользователь ввёл в консоли какое-то число. А программа должна считать с консоли, какое же число ввёл пользователь.
- Пользователь ввёл в консоли какое-то слово. А программа должна считать с консоли, какое же слово ввёл пользователь.
Для решения таких задач в Java используется сканер (от англ. Scanner). Запомните: если что-то ввели в консоли, а нам надо считать что же именно ввели - используем сканер.
Итак, рассмотрим несколько примеров кода, после которых Вы:
- Поймёте на практике как работает сканер. Всего в статье будет 6 примеров кода. Рекомендуем все примеры кода запускать на своём компьютере и на практике изучать как это работает.
- Освоите 4 метода сканера:
Методы - это, грубо говоря, действия , которые может выполнять Scanner. На самом деле методов у сканера намного больше. Но на данном этапе Вам будет достаточно этих 4 методов. Ну что, поехали.
Пример №1 - с методом nextInt ()
Допустим, мы хотим, чтоб пользователь ввёл в консоль любое целое число от 1 до 10 , а программа вывела ему ответ, какое именно число он ввёл.
Поскольку нам необходимо как бы "сосканировать", какое число ввёл пользователь, всё логично - нам понадобится сканер. Ниже приводим решение и комментарии к решению.
Решение:
System . out . print ( "Введите любое целое число от 1 до 10: " ) ;Если Вы попробуете запустить этот код на своём компьютере, то в консоли Вы увидите следующее:
Введите любое целое число от 1 до 10:
Затем, если Вы, например, введёте число 5, то в консоли будет следующее:
Введите любое целое число от 1 до 10: 5
Вы ввели число 5
Комментарии:
В статье "Что такое библиотека Java?" мы с Вами разобрались, что в Java есть огромная библиотека протестированного кода - это уже готовые решения ко многим задачам, которые стоят перед программистами в их ежедневной работе . Также мы говорили о различных пакетах, классах и методах. Так вот, сейчас мы будем с Вами работать с пакетом java.util. В этом пакете есть класс Scanner. И у него есть методы (действия), которые позволяют работать с вводом и выводом информации в консоль.
Но чтобы мы смогли использовать в нашем коде класс Scanner, нам необходимо сделать 3 шага.
Шаг №1 - обязательно прописать вот такую строчку в коде
Читайте также: