Чтобы использовать класс Scanner, его необходимо сначала импортировать. После этого объект должен быть создан из него. После использования объекта «Сканер» его необходимо закрыть. Объект входного потока, представляющий клавиатуру, - System.in. В сканере есть много методов. В этой статье будут описаны только наиболее часто используемые.
Содержание статьи
- Простое использование класса сканера
- Разделение строки ввода на значения
- Чтение и проверка примитивных типов данных
- Назначение входного токена переменной
- Заключение
Простое использование класса сканера
Следующий код просит пользователя ввести предложение, а затем отображает предложение:
Импортировать java.util.Scanner;
общественный классКласс{
общественный статический пустотаглавный( Нить []аргументы) {
Сканер scanObjзнак равно новыйСканер( Система .в);
Система .из.println('Введите предложение и нажмите Enter:');
Нить приговорзнак равноscanObj.nextLine();
Система .из.println(приговор);
scanObj.близко();
}
}
Первая строка импортирует класс Scanner. В функции main первая строка создает объект сканера, используя объект System.in для клавиатуры. Как только объект сканера создан, он начинает ждать ввода. В следующей строке печатается инструкция, предлагающая пользователю ввести предложение. В следующей строке кода используется метод nextLine () объекта сканера для чтения предложения пользователя после того, как он нажмет Enter. Следующая строка в коде повторяет предложение в окне терминала. Последняя строка закрывает объект сканера.
Разделение строки ввода на значения
Следующий код разбивает строку ввода на слова (токены), используя пробел в качестве разделителя:
Импортировать java.util.Scanner;общественный классКласс{
общественный статический пустотаглавный( Нить []аргументы) {
Сканер scanObjзнак равно новыйСканер( Система .в);
Система .из.println('Введите строку токенов и нажмите Enter:');
в то время как(scanObj.hasNext()){
Система .из.println(scanObj.следующий());
}
scanObj.близко();
}
}
hasNext () и next () - два других метода объекта сканера. Когда объект сканера читает строку, он ее сохраняет. next () обращается к следующему токену (слову). hasNext () возвращает истину, если есть какой-либо другой токен, к которому еще нет доступа.
К сожалению, пользователь по-прежнему должен вводить ввод для разделения и повторного отображения с помощью этого кода. Чтобы закончить все это, нажмите Ctrl + z, и вы должны вернуться в командную строку.
В приведенном выше коде разделитель разделяет токены в пространстве. Можно использовать другой персонаж. В следующем коде используется запятая. Не забудьте нажать Ctrl + z, чтобы завершить цикл, если вы проверяете код.
Импортировать java.util.Scanner;общественный классКласс{
общественный статический пустотаглавный( Нить []аргументы) {
Сканер scanObjзнак равно новыйСканер( Система .в);
Система .из.println('Введите строку токенов и нажмите Enter:');
scanObj.useDelimiter(',');
в то время как(scanObj.hasNext()){
Система .из.println(scanObj.следующий());
}
scanObj.близко();
}
}
Если вы протестировали код, вы бы заметили, что пробелы в токенах были включены как часть токенов (вывод). Выражение scanObj.useDelimiter (,); набирается после того, как строка ввода была прочитана; это то, что делает запятую, разделитель.
Чтение и проверка примитивных типов данных
nextBoolean () метод
В следующем коде ожидается, что пользователь введет либо true, либо false без кавычек, а затем нажмите клавишу Enter, если пользователь введет что-нибудь еще, например да или нет, появится сообщение об ошибке.
Импортировать java.util.Scanner;общественный классКласс{
общественный статический пустотаглавный( Нить []аргументы) {
Система .из.Распечатать(«Вам больше 24? ');
Сканер scanObjзнак равно новыйСканер( Система .в);
логическийблзнак равноscanObj.nextBoolean();
если (бл== правда) {
Система .из.println('Вам больше 24');
}
еще если (бл== ложный) {
Система .из.println('Вам меньше 24 лет');
}
scanObj.близко();
}
}
Поскольку java выдает сообщение об ошибке, если ввод не является точным истинным или ложным, вместо else использовался else if.
Разница между методами print и println в том, что print ожидает ввода в текущей строке, а println ожидает ввода в следующей строке.
nextByte () метод
В наборе символов ASCII символ составляет один байт. Однако с некоторыми наборами восточных символов символ может состоять из более чем одного байта. Независимо от набора символов метод nextByte считывает и проверяет следующий байт ввода. Для этого можно использовать следующий код:
Импортировать java.util.Scanner;общественный классКласс{
общественный статический пустотаглавный( Нить []аргументы) {
Система .из.Распечатать('Типовой номер<128, press Enter: ');
Сканер scanObjзнак равно новыйСканер( Система .в);
байтbtзнак равноscanObj.nextByte();
Система .из.println(bt);
scanObj.близко();
}
}
Если для этого кода будет введено число больше 127 или буквенный знак, будет выдано сообщение об ошибке.
nextInt () Метод
Следующий целочисленный токен в качестве входных данных также может быть проверен и принят. Можно использовать следующий код:
Импортировать java.util.Scanner;общественный классКласс{
общественный статический пустотаглавный( Нить []аргументы) {
Система .из.Распечатать('Введите любое целое число:');
Сканер scanObjзнак равно новыйСканер( Система .в);
intна однойзнак равноscanObj.nextInt();
Система .из.println(на одной);
scanObj.близко();
}
}
Начальные и конечные пробелы удалены. Для этого кода будет принято любое целочисленное значение, включая значения больше 127. С помощью этих методов nextXXX () после сбоя проверки выдается сообщение об ошибке.
nextBigInteger () Метод
Кажется, программисты никогда не перестанут придумывать новые вещи. Большое целое число - это целое число, значение которого намного больше, чем у целого числа. Однако в Java его можно читать так же, как и целое число. Следующий код иллюстрирует это:
Импортировать java.util.Scanner;Импортировать java.math.BigInteger;
общественный классКласс{
общественный статический пустотаглавный( Нить []аргументы) {
Система .из.println('Введите любое целое число для большого целого:');
Сканер scanObjзнак равно новыйСканер( Система .в);
BigInteger на однойзнак равноscanObj.nextBigInteger();
Система .из.println(на одной);
scanObj.близко();
}
}
Обратите внимание на оператор импорта import java.math.BigInteger ;. Также обратите внимание, что тип большого целого числа начинается с верхнего регистра B, а не с нижнего регистра b.
nextFloat () Метод
Следующий токен с плавающей запятой в качестве входных данных также может быть проверен и принят. Можно использовать следующий код:
Импортировать java.util.Scanner;общественный классКласс{
общественный статический пустотаглавный( Нить []аргументы) {
Система .из.Распечатать('Введите любой Float:');
Сканер scanObjзнак равно новыйСканер( Система .в);
плаватьна однойзнак равноscanObj.nextFloat();
Система .из.println(на одной);
scanObj.близко();
}
}
Пример числа с плавающей запятой - 23,456. Начальные и конечные пробелы удалены.
nextDouble ()
Следующий двойной токен в качестве входных данных также может быть подтвержден и принят. Можно использовать следующий код:
Импортировать java.util.Scanner;общественный классКласс{
общественный статический пустотаглавный( Нить []аргументы) {
Система .из.Распечатать('Введите любой Double:');
Сканер scanObjзнак равно новыйСканер( Система .в);
двойнойна однойзнак равноscanObj.nextDouble();
Система .из.println(на одной);
scanObj.близко();
}
}
Пример двойного числа 23.456. Число типа double отличается от числа с плавающей запятой, поскольку оно имеет меньшую погрешность. Начальные и конечные пробелы удалены.
nextLine () метод
Метод nextLine () предназначен для строки. Если строка является строкой ввода с клавиатуры после нажатия Enter, она может содержать символ новой строки ‘ n’. Можно использовать следующий код:
Импортировать java.util.Scanner;общественный классКласс{
общественный статический пустотаглавный( Нить []аргументы) {
Система .из.println('Введите строку, имеющую\n: ');
Сканер scanObjзнак равно новыйСканер( Система .в);
Нить пзнак равноscanObj.nextLine();
Система .из.println(п);
scanObj.близко();
}
}
Обратите внимание, что строковый тип начинается с верхнего регистра S, а не с нижнего регистра s.
Методы nextLine (), hasNext () и next () использовались ранее в этой статье. У сканера есть другие методы и другие примитивные методы данных - см. Ниже.
Назначение ввода переменной
Входные данные могут быть присвоены переменной, как показано в следующем коде:
Импортировать java.util.Scanner;общественный классКласс{
общественный статический пустотаглавный( Нить []аргументы) {
Сканер scanObjзнак равно новыйСканер( Система .в);
Система .из.Распечатать('Введите имя: ');
Нить имязнак равноscanObj.nextLine();
Система .из.Распечатать('Введите возраст:');
intвозрастзнак равноscanObj.nextInt();
Система .из.Распечатать('Введите зарплату:');
двойнойзарплатазнак равноscanObj.nextDouble();
Система .из.println('Имя: ' +имя+ ', Возраст: ' +возраст+ ', Зарплата: ' +зарплата);
scanObj.близко();
}
}
Заключение
Сканер в Java - это класс в пакете java.util. Этот класс предназначен для чтения ввода из строки, клавиатуры, файла или сетевого сокета. В этой статье основное внимание уделяется чтению ввода с клавиатуры и отображению результата в окне терминала. Подобные идеи можно использовать для чтения ввода из строки, файла или сетевого канала.
Чтобы прочитать всю строку ввода с клавиатуры, используйте метод nextLine (). Строку как строку можно разделить на токены с помощью методов hasNext () и next (), а также цикла while. Разделителем по умолчанию для разделения является пробел, но программист может выбрать другой разделитель. При необходимости не забудьте нажать Ctrl + z, чтобы остановить цикл while. Удаление начальных и конечных пробелов можно выполнить с помощью других схем, не рассматриваемых в этой статье. Проверка токенов также может быть выполнена с использованием других схем, не рассмотренных в этой статье.
Примитивные значения могут быть прочитаны с помощью nextBoolean (), nextByte (), nextInt () и т. Д. Эти методы nextXXX () выполняют проверку, а также удаляют начальные и конечные пробелы.
Сканер Java имеет гораздо больше методов. Однако в этой статье объясняется базовое использование сканера. Выбор токена фактически выполняется с использованием методов регулярных выражений. Использование методов регулярных выражений будет обсуждаться в другой раз.