33 Java. Потоки ввода-вывода. Работа с файлами. Белорусский государственный экономический университет кафедра экономической информатики
Скачать 1.6 Mb.
|
Класс ScannerРассмотрим подробно класс Scanner, хотя им уже многократно пользовались для ввода данных. Он предназначен для извлечения информации практически из любых источников. Некоторые конструкторы класса: Scanner(String source) Scanner(InputStream source) Scanner(Path source) Scanner(Path source, String charset) где source - источник входных данных, а charset - кодировка источника. Объект класса Scanner читает наборы символов с набором разделителей из источника, указанного в конструкторе. «По умолчанию» набором разделителей являются пробельные символы, а для строк – символ перевода на следующую строку. Формат создания объекта класса Scanner: Scanner ОбъектСканера = new Scanner(ИницОбъект); Пример. Scanner console = new Scanner(System.in); Далее с помощью созданного объекта ОбъектСканера можно вызывать методы. Методов у класса Scanner очень много, но можно по частоте использования в учебных программах выделить следующие две группы методов. Методы, считывающие данные из потока или объекта ИницОбъект, с которым связан объект сканера ОбъектСканера: nextLine() - метод, считывающий строку (до символа перевода на новую строку) из ИницОбъект; nextBoolean() - метод, считывающий булевское значение из ИницОбъект; nextByte() - метод, считывающий значение типа byte из ИницОбъект; nextDouble() - метод, считывающий значение типа double из ИницОбъект; nextFloat() - метод, считывающий значение типа float из ИницОбъект; nextInt() - метод, считывающий значение типа int из ИницОбъект; nextLong() - метод, считывающий значение типа long из ИницОбъект; nextShort() - метод, считывающий значение типа short из ИницОбъект. Следующей группой методов является методы, возвращающие булевское значение true после считывания значения одним из вышеприведенных методов: hasNextLine() - метод, который возвращает значение true или false, определяя является ли порция данных, которую возвратил метод nextLine() строкой; hasNextInt() - метод проверяет, является ли следующая порция введенных данных целым числом, или нет (возвращает, соответственно, true или false); hasNextByte(), hasNextShort(), hasNextLong(), hasNextFloat(), hasNextDouble() - все эти методы делают то же для остальных типов данных. Приведем менее привычный пример использования конструктора Scaner-а. Пример. Результат работы программы: В этом же примере есть еще один метод, на который нужно обязательно обратить внимание - close(). Как и любой объект, работающий с потоками ввода-вывода, сканер должен быть закрыт по завершении своей работы, чтобы больше не потреблять ресурсы компьютера. Далее для проверки наличия произвольной лексемы (значимого набора символов) объект Scanner-а использует метод boolean hasNext(). Произвольная лексема считывается методом String next(). После извлечения любой лексемы текущий указатель устанавливается перед следующей лексемой. Проверка конкретного типа производится с помощью одного из методов группы boolean hasNextТип() или boolean hasNextТип (int radix), где radix - основание системы счисления. Объект класса Scanner определяет границы лексемы, основываясь на наборе разделителей. Можно задавать разделители с помощью метода useDelimiter(Pattern pattern) или useDelimiter(String regex), где pattern и regex содержит набор разделителей в виде регулярного выражения. Пример. Результат работы программы: В методе useDelimiter() указано, что разделителем является знак ';' и регулярное выражение \\s* указывающее, что после точки с запятой может быть произвольное (от нуля и больше) число пробелов. Можно вместо строки «;\\s*», указать строку «\\s*;\\s*». Это будет означать, что произвольное число пробелов может быть до и после символа-разделителя ';'. Замечание. Работа с регулярными выражениями не входит в данный курсиприведентолькосцельюдемонстрацииработыметодаuseDelimiter(). |