Класс Scanner в Java
java.util.Scanner — новая возможность в Java 5. Мы можем получать пользовательский ввод через класс Scanner.
Ниже приведён базовый синтаксис создания объекта Scanner:
Далее мы демонстрируем простой ввод данных и получаем входную строку с помощью методов next() и nextLine() класса Scanner. Перед чтением нам обычно нужно использовать hasNext и hasNextLine, чтобы определить, есть ли ещё входные данные:
Использование метода next:
Код файла ScannerDemo.java:
Вывод после выполнения вышеприведённой программы:
$ javac ScannerDemo.java $ java ScannerDemo next方式接收: example com 输入的数据为:example
Видно, что строка com не была выведена. Далее рассмотрим nextLine.
Использование метода nextLine:
Код файла ScannerDemo.java:
Вывод после выполнения вышеприведённой программы:
$ javac ScannerDemo.java $ java ScannerDemo nextLine方式接收: example com 输入的数据为:example com
Видно, что строка com выводится.
Разница между next() и nextLine()
next():
- 1. Ввод может быть завершён только после считывания допустимых символов.
- 2. Метод next() автоматически удаляет пробельные символы, встречающиеся перед допустимыми входными символами.
- 3. Только после ввода допустимых символов пробельные символы после них будут использоваться в качестве разделителя или терминатора.
- next() не может получить строку с пробелами.
nextLine():
- 1. Enter является терминатором, то есть метод nextLine() возвращает все символы до ввода клавиши Enter.
- 2. Метод может получать пробельные символы.
Если вы хотите вводить данные типа int или float, класс Scanner также поддерживает это, но перед вводом лучше использовать метод hasNextXxx() для проверки, а затем nextXxx() для чтения:
Код файла ScannerDemo.java:
Вывод после выполнения вышеприведённой программы:
$ javac ScannerDemo.java $ java ScannerDemo 输入整数:12 整数数据:12 输入小数:1.2 小数数据:1.2
В следующем примере мы можем ввести несколько чисел и вычислить их сумму и среднее. Каждое число подтверждается нажатием Enter. Завершите ввод, введя нечисловое значение, затем выводится результат выполнения:
Код файла ScannerDemo.java:
Вывод после выполнения вышеуказанной программы (введите не число, чтобы завершить ввод):
$ javac ScannerDemo.java $ java ScannerDemo 请输入数字: 12 23 15 21.4 end 4个数的和为71.4 4个数的平均值是17.85
Часто используемые методы
| Метод | Описание |
|---|---|
| Конструкторы | |
Scanner(File source) |
Создание Scanner из файла |
Scanner(InputStream source) |
Создание Scanner из входного потока |
Scanner(String source) |
Создание Scanner из строки |
| Основные методы ввода | |
boolean hasNext() |
Проверка наличия следующего токена (разделённого пробелами) |
String next() |
Чтение следующего токена (строки) |
boolean hasNextLine() |
Проверка наличия следующей строки |
String nextLine() |
Чтение содержимого следующей строки |
| Методы проверки типов | |
boolean hasNextInt() |
Проверить, является ли следующий токен целым числом |
boolean hasNextDouble() |
Проверить, является ли следующий токен числом типа double |
boolean hasNextBoolean() |
Проверить, является ли следующий токен значением boolean |
| Методы чтения типов | |
int nextInt() |
Прочитать следующее целое число |
double nextDouble() |
Прочитать следующее число типа double |
boolean nextBoolean() |
Прочитать следующее значение boolean |
long nextLong() |
Прочитать следующее длинное целое число |
float nextFloat() |
Прочитать следующее число типа float |
short nextShort() |
Прочитать следующее короткое целое число |
byte nextByte() |
Прочитать следующее значение типа byte |
| Управление разделителями | |
Scanner useDelimiter(String pattern) |
Установить шаблон разделителя |
Scanner useDelimiter(Pattern pattern) |
Установить разделитель с помощью регулярного выражения |
String delimiter() |
Вернуть текущий используемый шаблон разделителя |
| Другие методы | |
void close() |
Закрыть сканер |
Scanner skip(Pattern pattern) |
Пропустить ввод, соответствующий указанному шаблону |
Scanner skip(String pattern) |
Пропустить ввод, соответствующий указанной строке |
String findInLine(Pattern pattern) |
Найти указанный шаблон в текущей строке |
String findInLine(String pattern) |
Найти указанную строку в текущей строке |
Scanner reset() |
Сбросить сканер |
Locale locale() |
Вернуть текущую локаль, используемую сканером |
Scanner useLocale(Locale locale) |
Установить локаль сканера |
Для получения дополнительных сведений обратитесь к документации API:https://www.example.com/manual/jdk11api/java.base/java/util/Scanner.html。
Другие расширения