Класс Scanner в Java — описание и пример использования
Класс сканера в Java
Scanner — это класс в пакете java.util, используемый для получения ввода примитивных типов, таких как int, double и т. Д., А также строк. Это самый простой способ чтения ввода в Java-программе, хотя и не очень эффективный, если вам нужен метод ввода для сценариев, где время является ограничением, как в конкурентном программировании.
- Чтобы создать объект класса Scanner, мы обычно передаем предопределенный объект System.in, который представляет стандартный поток ввода. Мы можем передать объект класса File, если мы хотим прочитать ввод из файла.
- Чтобы прочитать числовые значения определенного типа данных XYZ, используйте функцию nextXYZ (). Например, чтобы прочитать значение типа short, мы можем использовать nextShort ()
- Для чтения строк мы используем nextLine ().
- Чтобы прочитать один символ, мы используем next (). CharAt (0). Функция next () возвращает следующий токен / слово на входе в виде строки, а функция charAt (0) возвращает первый символ в этой строке.
Давайте посмотрим на фрагмент кода для чтения данных различных типов данных.
// Java-программа для чтения данных различных типов с использованием класса Scanner.
public class ScannerDemo1
public static void main(String[] args)
// Объявляем объект и инициализируем
// предопределенный стандартный объект ввода
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
char gender = sc.next().charAt( 0 );
// Числовой ввод данных
// можно прочитать байты, короткие и плавающие
// используя функции с похожими именами.
int age = sc.nextInt();
long mobileNo = sc.nextLong();
double cgpa = sc.nextDouble();
// Распечатать значения, чтобы проверить, был ли ввод получен правильно.
System.out.println( “Name: ” +name);
System.out.println( “Gender: ” +gender);
System.out.println( “Age: ” +age);
System.out.println( “Mobile Number: ” +mobileNo);
System.out.println( “CGPA: ” +cgpa);
Иногда мы должны проверить, относится ли следующее значение, которое мы читаем, к определенному типу или ввод закончился (обнаружен маркер EOF).
Затем мы проверяем, имеет ли вход сканера нужный нам тип, с помощью функций hasNextXYZ (), где XYZ — это интересующий нас тип. Функция возвращает true, если у сканера есть токен этого типа, в противном случае — false. Например, в приведенном ниже коде мы использовали hasNextInt (). Чтобы проверить строку, мы используем hasNextLine (). Точно так же, чтобы проверить наличие одного символа, мы используем hasNext (). CharAt (0).
Давайте посмотрим на фрагмент кода, чтобы прочитать некоторые числа из консоли и вывести их среднее значение.
// Java-программа для чтения некоторых значений с помощью Scanner
// Класс и напечатать их среднее.
public class ScannerDemo2
public static void main(String[] args)
// Объявляем объект и инициализируем
// предопределенный стандартный объект ввода
Scanner sc = new Scanner(System.in);
// Инициализируем сумму и количество входных элементов
int sum = 0 , count = 0 ;
// Проверяем, доступно ли значение int
// Чтение значения типа int
int num = sc.nextInt();
int mean = sum / count;
System.out.println( “Mean: ” + mean);
Эта статья предоставлена Сукрит Бхатнагар . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме
Использование класса Scanner в Java — примеры и методы
Это руководство по посвящено использованию класса Scanner в Java пакета java.util. Мы будем показывать базовое применение класса Scanner до самых расширенных функций этого класса, используя примеры.
Класс Scanner имеет богатый набор API, который обычно используется для разбиения входных данных конструктора Scanner на токены. Входные данные разбиваются на токены с помощью разделителя, определенного в классе Scanner с использованием метода radix, или могут быть определены.
Объявление:
public final class Scanner
extends Object
implements Iterator, Closeable
Конструкторы класса Scanner — public Scanner(Readable source)
Создает новый сканер, который создает значения, отсканированные из указанного источника.
Параметры: source — источник символов, реализующий интерфейс Readable
Не путайте с типом объекта, доступным для чтения в качестве параметра конструктора. Readable — это интерфейс, который был реализован с помощью BufferedReader, CharArrayReader, CharBuffer, FileReader, FilterReader, InputStreamReader, LineNumberReader, PipedReader, PushbackReader, Reader, StringReader.
Это означает, что мы можем использовать любой из этих классов в Java при создании экземпляра объекта Scanner.
public Scanner(InputStream source)
Создает новый сканер, который создает значения, отсканированные из указанного входного потока. Байты из потока преобразуются в символы с использованием кодировки по умолчанию базовой платформы.
Параметры: источник — входной поток для сканирования.
Метод ввода этого конструктора — InputStream. Класс InputStream является одним из классов верхнего уровня в пакете java.io, и его использование будет проблемой.
Однако мы можем использовать подклассы InputStream, как показано ниже. Мы использовали FileInputStream, поскольку он является подклассом InputStream, при его включении проблем не возникнет.
public Scanner(File source) выдает исключение FileNotFoundException
Байты из файла преобразуются в символы с кодировкой по умолчанию базовой платформы.
Параметры: источник — файл для сканирования
Этот конструктор очень прост. Просто требует источник файла. Единственной целью этого конструктора является создание экземпляра объекта Scanner для сканирования через файл.
public Scanner(Path source) throws IOException
источник — путь к файлу для сканирования. Для параметра конструктора требуется источник Path, который используется редко.
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.
Вводный курс. Язык программирования Java
9. Ввод данных. Класс Scanner
Класс Scanner используется для считывания введенных пользователем данных следующих типов: String, byte, short, int, long, float, double.
В Java при работе со строками используется понятие токен. Токен – это подстрока, не содержащая разделителей и ограниченная слева и справа разделителями. Стандартными разделителями являются: пробел ‘ ‘ , символ тубуляции ‘t’ , перевода строки ‘n’ и возврата каретки ‘r’ , например, строка
“Университетский центр Турбо”
содержит три токена:
В этом примере использовался стандартный разделить – пробел. При необходимости можно задать собственный разделить, который доложен иметь тип String .
Вернемся к сканеру. Сканер выполняет поиск токенов во входной строке. Для работы со сканером необходимо создать объект класса Scanner, указав с какими потоками ввода/вывода он будет связан:
- Стандартный поток ввода – это клавиатура представлен объектом — System.in.
- Стандартный поток вывода – это дисплей представлен объектом System.out.
- Потоком ввода может быть файл , например,
- а также строка, определенная в коде программы, например,
Пример. Создаем объект класса Scanner и связываем его с клавиатурой для ввода данных с клавиатуры:
Scanner scan = new Scanner(System.in);
Класс Scanner имеет следующие основные методы:
- next() считывает введенную строку
- nextBoolean() считывает введенное логическое значение
- nextInt() считывает введенное целое число типа int
- nextFloat() считывает введенное вещественное число типа float
- nextDouble() считывает введенное вещественное число типа double
- nextLine( ) считывает введенную всю строку до символа перехода на новую строку.
Если считываемый тип данных не соответствует используемому типу метода сканера, то возникнет ошибка времени выполнения программы, например, читаем целое число, а пользователь вводит дробное. Для того чтобы избежать подобных ошибок используются методы проверки считываемых типов:
- boolean hasNextLine() : вернет true если следующим значением является строка, иначе — false;
- boolean hasNextInt(): вернет true если значением является значение типа int;
- boolean hasNextFloat() : вернетtrue если следующим значением является значение типаfloat;
Пример. Чтение целого числа
Пример. Чтение вещественного числа
По умолчанию дробное число вводится через запятую. Если требуется вводить число через точку, необходимо установить локаль:
Пример. Чтение последовательности целых чисел
При вводе числа отделяются между собой нажатием клавиши «Enter» или пробелом. Ввод прервется, если будет введено не целое число.
Пример. Ввод строки
Пример. Обработка строки, заданной в коде программы
Пример. Чтение файла
При использовании кириллицы файл должен иметь кодировку UTF-8.