С помощью класса java.util.Scanner
можно анализировать простые типы данных и строки. Этот класс принимает данные из файлов, потоков, строк, последовательностей символов или байтов.
Входные данные разбиваются на токены. По умолчанию разделителем токенов служит пробел, но его можно заменить строкой (java.lang.String
) или регулярным выражением (java.util.regex.Pattern
).
Для создания сканера используется конструктор Scanner
, которому передаются входные данные и при необходимости тип кодировки.
Давайте рассмотрим конструкторы этого класса по порядку.
Создает сканер, с помощью которого можно получить значения из источника, реализующего интерфейс Readable
. Это могут быть объекты классов:
Вот как это делается с помощью класса FileReader
:
FileReader reader = new FileReader(new File("D:\Scanner.txt")); Scanner scanner = new Scanner(reader);
Этот конструктор создает сканер, с помощью которого можно получить значения из указанного входного потока. Байты из такого потока преобразуются в символы (с использованием набора символов по умолчанию для базовой платформы).
Также есть вариант конструктора, который позволяет получать значения из входного потока, преобразовывая байты в символы с использованием набора символов, указанного пользователем:
public Scanner(InputStream source, String charsetName)
Если указанный набор символов не существует, выбрасывается исключительная ситуация IllegalArgumentException
. Это справедливо для всех вариантов методов с указанием аргумента charsetName
.
Например, для потока стандартного ввода он объявляется просто:
Scanner scanner = new Scanner(System.in)
Создает сканер, который позволяет получать значения из указанного объекта класса java.io.File
. Если указанный файл не найден, возникает исключительная ситуация FileNotFoundException
. Символы преобразовываются в байты с использованием набора символов по умолчанию для базовой платформы.
Чтобы использовать произвольный набор символов, укажите его во втором аргументе:
public Scanner(File source, String charsetName) throws FileNotFoundException
Например:
Scanner scanner = new Scanner(new File("D:\Scanner.txt"));
Создает сканер, который позволяет получать значения из указанного объекта, реализующего интерфейс 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);
Создает сканер, который позволяет получать значения из указанной строки:
Scanner scanner = new Scanner("Parse me");
Чтобы прочитать файл с помощью класса 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"); } } }
Чтобы прочитать данные из консоли, создадим входной поток 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); } }
Тип возврата | Метод | Описание |
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.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…