Главная страница
Навигация по странице:

  • ОбъектСканера

  • 33 Java. Потоки ввода-вывода. Работа с файлами. Белорусский государственный экономический университет кафедра экономической информатики


    Скачать 1.6 Mb.
    НазваниеБелорусский государственный экономический университет кафедра экономической информатики
    Дата06.01.2023
    Размер1.6 Mb.
    Формат файлаdocx
    Имя файла33 Java. Потоки ввода-вывода. Работа с файлами.docx
    ТипЛитература
    #874813
    страница6 из 13
    1   2   3   4   5   6   7   8   9   ...   13

    Класс 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().

    1   2   3   4   5   6   7   8   9   ...   13


    написать администратору сайта