Класс Scanner
- java.lang.Object
-
- java.util.Scanner
- Все реализованные интерфейсы:
- Closeable, AutoCloseable, Iterator<String>
public final class Scanner extends Object implements Iterator<String>, Closeable
Простой сканер текста, который может анализировать примитивные типы и строки с использованием регулярных выражений.
Сканер разбивает входной поток на токены с использованием разделителя, который по умолчанию соответствует пробелам. Полученные токены затем могут быть преобразованы в значения различных типов с помощью различных методов.
Например, этот код позволяет пользователю читать число из файла:
Scanner sc = new Scanner(System.in); int i = sc.nextInt();
В качестве другого примера, этот код позволяет присваивать значения различных типов из записей в файле:
Scanner sc = new Scanner(new File("myNumbers"));
while (sc.hasNextLong()) {
long aLong = sc.nextLong();
} Сканер также может использовать разделители, отличные от пробелов. В этом примере считываются несколько элементов из строки:
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close(); выводит следующий результат:
1 2 red blue
Этот же результат может быть получен с помощью кода, который использует регулярное выражение для анализа всех четырех токенов сразу:
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input);
s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
MatchResult result = s.match();
for (int i=1; i<=result.groupCount(); i++)
System.out.println(result.group(i));
s.close(); Разделитель по умолчанию, используемый сканером, соответствует пробелам, определяемым методом Character.isWhitespace. Метод reset() сбросит значение разделителя сканера на стандартный разделитель пробелов независимо от того, был ли он изменён ранее.
Операция сканирования может блокироваться в ожидании ввода.
Методы next() и hasNext(), а также их аналоги для примитивных типов (например, nextInt() и hasNextInt()) сначала пропускают любой ввод, соответствующий шаблону разделителя, а затем пытаются вернуть следующий токен. Оба метода могут блокироваться в ожидании дополнительного ввода. Блокирование метода hasNext не связано с блокировкой соответствующего метода next.
Методы findInLine(java.lang.String), findWithinHorizon(java.lang.String, int) и skip(java.util.regex.Pattern) работают независимо от шаблона разделителя. Эти методы попытаются сопоставить указанный шаблон без учёта разделителей во входных данных и, таким образом, могут быть использованы в особых случаях, когда разделители не важны. Эти методы могут блокироваться в ожидании дальнейшего ввода.
Если сканер выбрасывает исключение InputMismatchException, то сканер не передаст токен, вызвавший исключение, чтобы его можно было получить или пропустить с помощью другого метода.
В зависимости от типа шаблона разделителя, могут возвращаться пустые токены. Например, шаблон "\\s+" не вернёт пустых токенов, так как он соответствует нескольким экземплярам разделителя. Шаблон разделителя "\\s" может возвращать пустые токены, так как он пропускает только один пробел за раз.
Сканер может читать текст из любого объекта, реализующего интерфейс Readable. Если вызов метода Readable.read(java.nio.CharBuffer) базового объекта, реализующего интерфейс, выбросит исключение IOException, то сканер предполагает, что достигнут конец ввода. Последнее исключение, выброшенное базовым объектом, реализующим интерфейс, можно получить с помощью метода ioException().
При закрытии сканера, он закроет свой источник ввода, если источник реализует интерфейс Closeable.
Сканер не является потокобезопасным без внешней синхронизации.
Если не указано иное, передача параметра null в любой метод сканера вызовет исключение NullPointerException.
Сканер по умолчанию интерпретирует числа как десятичные, если не указано иное с помощью метода useRadix(int). Метод reset() сбросит значение радикса сканера на 10 независимо от того, изменялось ли оно ранее.
Локализованные числа
Экземпляр этого класса способен сканировать числа в стандартных форматах, а также в форматах локали сканера. Начальная локали сканера - это значение, возвращаемое методом Locale.getDefault(Locale.Category.FORMAT); она может быть изменена с помощью метода useLocale(java.util.Locale). Метод reset() сбросит значение локали сканера на начальную локали независимо от того, изменялось ли оно ранее.
Локализованные форматы определяются следующими параметрами, которые для конкретной локали берутся из объекта DecimalFormat этой локали, df, и объекта DecimalFormatSymbols, dfs.
- LocalGroupSeparator
- Символ, используемый для разделения групп тысяч, т.е.
dfs.getGroupingSeparator() - LocalDecimalSeparator
- Символ, используемый для десятичной точки, т.е.
dfs.getDecimalSeparator() - LocalPositivePrefix
- Строка, предшествующая положительному числу (может быть пустой), т.е.
df.getPositivePrefix() - LocalPositiveSuffix
- Строка, следующая за положительным числом (может быть пустой), т.е.
df.getPositiveSuffix() - LocalNegativePrefix
- Строка, предшествующая отрицательному числу (может быть пустой), т.е.
df.getNegativePrefix() - LocalNegativeSuffix
- Строка, следующая за отрицательным числом (может быть пустой), т.е.
df.getNegativeSuffix() - LocalNaN
- Строка, представляющая число не является числом для чисел с плавающей запятой, т.е.
dfs.getNaN() - LocalInfinity
- Строка, представляющая бесконечность для чисел с плавающей запятой, т.е.
dfs.getInfinity()
Синтаксис чисел
Строки, которые могут быть проанализированы как числа экземпляром этого класса, определяются грамматикой регулярного выражения, где Rmax - это наибольшая цифра в используемом радиксе (например, Rmax - это 9 в десятичной системе).
- NonAsciiDigit:
- Не-ASCII символ c, для которого
Character.isDigit(c)возвращает true - Non0Digit:
-
[1-Rmax] |NonASCIIDigit - Digit:
-
[0-Rmax] |NonASCIIDigit - GroupedNumeral:
-
(Non0Digit Digit?Digit?(LocalGroupSeparator Digit Digit Digit)+ ) - Numeral:
-
( (Digit+ ) |GroupedNumeral) - Целое число:
-
( [-+]? (Numeral) )|LocalPositivePrefix Numeral LocalPositiveSuffix|LocalNegativePrefix Numeral LocalNegativeSuffix - DecimalNumeral:
-
Numeral
|Numeral LocalDecimalSeparator Digit*|LocalDecimalSeparator Digit+ - Exponent:
-
( [eE] [+-]?Digit+ ) - Десятичное число:
-
( [-+]?DecimalNumeral Exponent? )|LocalPositivePrefix DecimalNumeral LocalPositiveSuffix Exponent?|LocalNegativePrefix DecimalNumeral LocalNegativeSuffix Exponent? - HexFloat:
-
[-+]? 0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+ ([pP][-+]?[0-9]+)? - NonNumber:
-
NaN |LocalNan| Infinity |LocalInfinity - SignedNonNumber:
-
( [-+]?NonNumber)|LocalPositivePrefix NonNumber LocalPositiveSuffix|LocalNegativePrefix NonNumber LocalNegativeSuffix - Число с плавающей точкой:
-
Decimal
|HexFloat|SignedNonNumber
Пробелы не учитываются в вышеприведённых регулярных выражениях.
- Since:
- 1.5
Конструкторы
| Конструктор и описание |
|---|
Scanner(File source) Создаёт новый |
Scanner(File source,
String charsetName) Создаёт новый |
Scanner(InputStream source) Создаёт новый |
Scanner(InputStream source,
String charsetName) Создаёт новый |
Scanner(Path source) Создаёт новый |
Scanner(Path source,
String charsetName) Создаёт новый |
Scanner(Readable source) Создаёт новый |
Scanner(ReadableByteChannel source) Создаёт новый |
Scanner(ReadableByteChannel source,
String charsetName) Создаёт новый |
Scanner(String source) Создаёт новый |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
void |
close() Закрывает этот сканер. |
Pattern |
delimiter() Возвращает |
String |
findInLine(Pattern pattern) Попытка найти следующее вхождение указанного шаблона, игнорируя разделители. |
String |
findInLine(String pattern) Попытка найти следующее вхождение шаблона, построенного из указанной строки, игнорируя разделители. |
String |
findWithinHorizon(Pattern pattern,
int horizon) Попытка найти следующее вхождение указанного шаблона. |
String |
findWithinHorizon(String pattern,
int horizon) Попытка найти следующее вхождение шаблона, построенного из указанной строки, игнорируя разделители. |
boolean |
hasNext() Возвращает true, если в входных данных этого сканера есть еще один токен. |
boolean |
hasNext(Pattern pattern) Возвращает true, если следующий полный токен соответствует указанному шаблону. |
boolean |
hasNext(String pattern) Возвращает true, если следующий токен соответствует шаблону, построенному из указанной строки. |
boolean |
hasNextBigDecimal() Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как |
boolean |
hasNextBigInteger() Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как |
boolean |
hasNextBigInteger(int radix) Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как |
boolean |
hasNextBoolean() Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как значение типа boolean с использованием нечувствительного к регистру шаблона, созданного из строки "true|false". |
boolean |
hasNextByte() Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как значение типа byte в стандартном формате с использованием метода |
boolean |
hasNextByte(int radix) Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как значение типа byte в указанном формате с использованием метода |
boolean |
hasNextDouble() Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как значение типа double с использованием метода |
boolean |
hasNextFloat() Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как значение типа float с использованием метода |
boolean |
hasNextInt() Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как значение типа int в стандартном формате с использованием метода |
boolean |
hasNextInt(int radix) Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как значение типа int в указанном формате с использованием метода |
boolean |
hasNextLine() Возвращает true, если в входных данных этого сканера есть другая строка. |
boolean |
hasNextLong() Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как значение типа long в стандартном формате с использованием метода |
boolean |
hasNextLong(int radix) Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как значение типа long в указанном формате с использованием метода |
boolean |
hasNextShort() Возвращает |
boolean |
hasNextShort(int radix) Возвращает локаль этого сканера. |
IOException |
ioException() Возвращает результат сопоставления последней операции сканирования, выполненной этим сканером. |
Locale |
locale() Возвращает следующий целый токен из этого сканера. |
MatchResult |
match() Возвращает следующий токен, если он соответствует указанному шаблону. |
String |
next() Находит и возвращает следующий полный токен из этого сканера. |
String |
next(Pattern pattern) Возвращает следующий токен, если он соответствует указанному шаблону. |
String |
next(String pattern) Возвращает следующий токен, если он соответствует шаблону, построенному из указанной строки. |
BigDecimal |
nextBigDecimal() Сканирует следующий токен ввода как |
BigInteger |
nextBigInteger() Сканирует следующий токен ввода как |
BigInteger |
nextBigInteger(int radix) Сканирует следующий токен ввода как |
boolean |
nextBoolean() Сканирует следующий токен ввода в значение типа boolean и возвращает это значение. |
byte |
nextByte() Сканирует следующий токен ввода как |
byte |
nextByte(int radix) Сканирует следующий токен ввода как |
double |
nextDouble() Сканирует следующий токен ввода как |
float |
nextFloat() Сканирует следующий токен ввода как |
int |
nextInt() Сканирует следующий токен ввода как |
int |
nextInt(int radix) Сканирует следующий токен ввода как |
String |
nextLine() Перемещает этот сканер за текущую строку и возвращает пропущенные входные данные. |
long |
nextLong() Сканирует следующий токен ввода как |
long |
nextLong(int radix) Сканирует следующий токен ввода как |
short |
nextShort() Сканирует следующий токен ввода как |
short |
nextShort(int radix) Сканирует следующий токен ввода как |
int |
radix() Возвращает стандартный формат счисления сканера. |
void |
remove() Операция удаления не поддерживается этой реализацией |
Scanner |
reset() Сбрасывает этот сканер. |
Scanner |
skip(Pattern pattern) Пропускает входные данные, соответствующие указанному шаблону, игнорируя разделители. |
Scanner |
skip(String pattern) Пропускает входные данные, соответствующие шаблону, построенному из указанной строки. |
String |
toString() Возвращает строковое представление этого |
Scanner |
useDelimiter(Pattern pattern) Устанавливает разделитель сканера в указанный шаблон. |
Scanner |
useDelimiter(String pattern) Устанавливает разделитель сканера в шаблон, построенный из указанной |
Scanner |
useLocale(Locale locale) Устанавливает локаль сканера в указанную локаль. |
Scanner |
useRadix(int radix) Устанавливает стандартный формат счисления сканера в указанный формат. |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Методы, унаследованные от интерфейса java.util.Iterator
forEachRemaining Конструкторы
Scanner
public Scanner(Readable source)
Создаёт новый Scanner, который генерирует значения, считанные из указанного источника.
- Параметры:
-
source- Источник символов, реализующий интерфейсReadable
Scanner
public Scanner(InputStream source)
Создаёт новый Scanner, который генерирует значения, считанные из указанного потока ввода. Байты из потока преобразуются в символы с использованием кодировки по умолчанию платформы по умолчанию.
- Параметры:
-
source- Поток ввода для сканирования
Scanner
public Scanner(InputStream source,
String charsetName) Создаёт новый Scanner, который генерирует значения, считанные из указанного потока ввода. Байты из потока преобразуются в символы с использованием указанной кодировки.
- Параметры:
-
source- Поток ввода для сканирования -
charsetName- Тип кодирования, используемый для преобразования байтов из потока в символы для сканирования - Исключения:
-
IllegalArgumentException- если указанного набора символов не существует
Scanner
public Scanner(File source)
throws FileNotFoundException Создаёт новый Scanner, который генерирует значения, считанные из указанного файла. Байты из файла преобразуются в символы с использованием кодировки по умолчанию платформы по умолчанию.
- Параметры:
-
source- Файл для сканирования - Исключения:
-
FileNotFoundException- если источник не найден
Scanner
public Scanner(File source,
String charsetName)
throws FileNotFoundException Создаёт новый Scanner, который генерирует значения, считанные из указанного файла. Байты из файла преобразуются в символы с использованием указанной кодировки.
- Параметры:
-
source- Файл для сканирования -
charsetName- Тип кодирования, используемый для преобразования байтов из файла в символы для сканирования - Исключения:
-
FileNotFoundException- если источник не найден -
IllegalArgumentException- если указанная кодировка не найдена
Scanner
public Scanner(Path source)
throws IOException Создаёт новый Scanner, который генерирует значения, считанные из указанного файла. Байты из файла преобразуются в символы с использованием кодировки по умолчанию платформы по умолчанию.
- Параметры:
-
source- путь к сканируемому файлу - Исключения:
-
IOException- если при открытии источника произошла ошибка ввода-вывода - С тех пор:
- 1.7
Scanner
public Scanner(Path source,
String charsetName)
throws IOException Создаёт новый Scanner, который генерирует значения, считанные из указанного файла. Байты из файла преобразуются в символы с использованием указанной кодировки.
- Параметры:
-
source- путь к сканируемому файлу -
charsetName- Тип кодирования, используемый для преобразования байтов из файла в символы для сканирования - Исключения:
-
IOException- если при открытии источника произошла ошибка ввода-вывода -
IllegalArgumentException- если указанная кодировка не найдена - С тех пор:
- 1.7
Scanner
public Scanner(String source)
Создаёт новый Scanner, который генерирует значения, считанные из указанной строки.
- Параметры:
-
source- Строка для сканирования
Scanner
public Scanner(ReadableByteChannel source)
Создаёт новый Scanner, который генерирует значения, считанные из указанного канала. Байты из источника преобразуются в символы с использованием кодировки по умолчанию платформы по умолчанию.
- Параметры:
-
source- Канал для сканирования
Scanner
public Scanner(ReadableByteChannel source,
String charsetName) Создаёт новый Scanner, который генерирует значения, считанные из указанного канала. Байты из источника преобразуются в символы с использованием указанной кодировки.
- Параметры:
-
source- Канал для сканирования -
charsetName- Тип кодирования, используемый для преобразования байтов из канала в символы для сканирования - Исключения:
-
IllegalArgumentException- если указанного набора символов не существует
Методы
close
public void close()
Закрывает этот сканер.
Если этот сканер ещё не закрыт, и его базовый readable также реализует интерфейс Closeable, то вызывается метод close readable. Если этот сканер уже закрыт, вызов этого метода не повлияет на него.
Попытка выполнения операций поиска после закрытия сканера приведёт к исключению IllegalStateException.
- Определено в:
-
closeв интерфейсеCloseable - Определено в:
-
closeв интерфейсеAutoCloseable
ioException
public IOException ioException()
Возвращает IOException последнюю исключительную ситуацию, сгенерированную данным сканером Scanner's underlying Readable. Этот метод возвращает null в случае отсутствия такого исключения.
- Возвращает:
- последнее исключение, сгенерированное readable сканера
delimiter
public Pattern delimiter()
Возвращает Pattern , используемый в данный момент этим сканером Scanner для сопоставления разделителей.
- Возвращает:
- шаблон разделителя этого сканера.
useDelimiter
public Scanner useDelimiter(Pattern pattern)
Устанавливает шаблон разделителя этого сканера на указанный шаблон.
- Параметры:
-
pattern- шаблон разделителя - Возвращает:
- этот сканер
useDelimiter
public Scanner useDelimiter(String pattern)
Устанавливает шаблон разделителя этого сканера на шаблон, созданный из указанной String.
Вызов этого метода в форме useDelimiter(pattern) ведет себя точно так же, как вызов useDelimiter(Pattern.compile(pattern)).
Вызов метода reset() установит разделитель сканера на значение по умолчанию.
- Параметры:
-
pattern- строка, определяющая шаблон разделителя - Возвращает:
- этот сканер
locale
public Locale locale()
Возвращает локаль этого сканера.
Локаль сканера влияет на многие элементы его стандартных выражений регулярных соответствий для примитивных типов; см. локализованные числа выше.
- Возвращает:
- локаль этого сканера
useLocale
public Scanner useLocale(Locale locale)
Устанавливает локаль этого сканера на указанную локаль.
Локаль сканера влияет на многие элементы его стандартных выражений регулярных соответствий для примитивных типов; см. локализованные числа выше.
Вызов метода reset() установит локаль сканера на начальную локаль.
- Параметры:
-
locale- строка, определяющая локаль для использования - Возвращает:
- этот сканер
radix
public int radix()
Возвращает базу по умолчанию для этого сканера.
База сканера влияет на элементы его стандартных выражений регулярных соответствий для чисел; см. локализованные числа выше.
- Возвращает:
- базу по умолчанию этого сканера
useRadix
public Scanner useRadix(int radix)
Устанавливает базу по умолчанию для этого сканера на указанную базу.
База сканера влияет на элементы его стандартных выражений регулярных соответствий для чисел; см. локализованные числа выше.
Если база меньше Character.MIN_RADIX или больше Character.MAX_RADIX, то выбрасывается IllegalArgumentException .
Вызов метода reset() установит базу сканера на 10.
- Параметры:
-
radix- база для сканирования чисел - Возвращает:
- этот сканер
- Исключения:
-
IllegalArgumentException- если база не входит в допустимый диапазон
match
public MatchResult match()
Возвращает результат сопоставления последней операции сканирования, выполненной этим сканером. Этот метод выбрасывает IllegalStateException , если сопоставление не было выполнено или последнее сопоставление не было успешным.
Различные next методы Scanner делают результат сопоставления доступным, если они завершаются без исключений. Например, после вызова метода nextInt(), вернувшего целое число, этот метод возвращает MatchResult для поиска регулярного выражения Integer, определенного выше. Аналогично методы findInLine(java.lang.String), findWithinHorizon(java.lang.String, int) и skip(java.util.regex.Pattern) сделают результат сопоставления доступным, если они завершатся успешно.
- Возвращает:
- результат сопоставления последней операции сопоставления
- Исключения:
-
IllegalStateException- если результат сопоставления недоступен
toString
public String toString()
Возвращает строковое представление этого Scanner. Строковое представление Scanner содержит информацию, которая может быть полезна для отладки. Точный формат не определён.
hasNext
public boolean hasNext()
Возвращает true, если этот сканер имеет ещё один токен в своём вводе. Этот метод может блокироваться во время ожидания ввода для сканирования. Сканер не перемещается мимо любого ввода.
- Указано:
-
hasNextв интерфейсеIterator<String> - Возвращает:
- true тогда и только тогда, когда у этого сканера есть другой токен
- Исключения:
-
IllegalStateException- если этот сканер закрыт - См. также:
Iterator
next
public String next()
Находит и возвращает следующий полный токен из этого сканера. Полный токен предшествует и следует за вводом, который соответствует шаблону разделителя. Этот метод может блокироваться, ожидая ввода для сканирования, даже если предыдущее обращение к hasNext() вернуло true.
- Указано:
-
nextв интерфейсеIterator<String> - Возвращает:
- следующий токен
- Исключения:
-
NoSuchElementException- если больше токенов недоступно -
IllegalStateException- если этот сканер закрыт - См. также:
Iterator
remove
public void remove()
Операция remove не поддерживается этой реализацией Iterator.
- Указано:
-
removeв интерфейсеIterator<String> - Исключения:
-
UnsupportedOperationException- если этот метод вызван. - См. также:
Iterator
hasNext
public boolean hasNext(String pattern)
Возвращает true, если следующий токен соответствует шаблону, созданному из указанной строки. Сканер не перемещается дальше по вводу.
Вызов этого метода в форме hasNext(pattern) ведет себя точно так же, как вызов hasNext(Pattern.compile(pattern)).
- Параметры:
-
pattern- строка, определяющая шаблон для сканирования - Возвращает:
- true, если и только если у этого сканера есть другой токен, соответствующий указанному шаблону
- Исключения:
-
IllegalStateException- если этот сканер закрыт
next
public String next(String pattern)
Возвращает следующий токен, если он соответствует шаблону, созданному из указанной строки. Если соответствие успешно, сканер перемещается дальше по вводу, который соответствовал шаблону.
Вызов этого метода в форме next(pattern) ведет себя точно так же, как вызов next(Pattern.compile(pattern)).
- Параметры:
-
pattern- строка, определяющая шаблон для сканирования - Возвращает:
- следующий токен
- Исключения:
-
NoSuchElementException- если такие токены недоступны -
IllegalStateException- если этот сканер закрыт
hasNext
public boolean hasNext(Pattern pattern)
Возвращает true, если следующий полный токен соответствует указанному шаблону. Полный токен предшествует и следует за вводом, который соответствует шаблону разделителя. Этот метод может блокироваться, ожидая ввода. Сканер не перемещается дальше по вводу.
- Параметры:
-
pattern- шаблон для сканирования - Возвращает:
- true, если и только если у этого сканера есть другой токен, соответствующий указанному шаблону
- Исключения:
-
IllegalStateException- если этот сканер закрыт
next
public String next(Pattern pattern)
Возвращает следующий токен, если он соответствует указанному шаблону. Этот метод может блокироваться, ожидая ввода для сканирования, даже если предыдущее обращение к hasNext(Pattern) вернуло true. Если соответствие успешно, сканер перемещается дальше по вводу, который соответствовал шаблону.
- Параметры:
-
pattern- шаблон для сканирования - Возвращает:
- следующий токен
- Исключения:
-
NoSuchElementException- если больше токенов недоступно -
IllegalStateException- если этот сканер закрыт
hasNextLine
public boolean hasNextLine()
Возвращает true, если в вводе этого сканера есть другая строка. Этот метод может блокироваться, ожидая ввода. Сканер не перемещается дальше по вводу.
- Возвращает:
- true, если и только если у этого сканера есть другая строка ввода
- Исключения:
-
IllegalStateException- если этот сканер закрыт
nextLine
public String nextLine()
Перемещает этот сканер за текущую строку и возвращает пропущенный ввод. Этот метод возвращает остаток текущей строки, исключая любой разделитель строк в конце. Позиция устанавливается в начало следующей строки.
Поскольку этот метод продолжает поиск по вводу в поисках разделителя строк, он может буферизовать весь ввод, ища строку для пропуска, если разделители строк отсутствуют.
- Возвращает:
- строка, которая была пропущена
- Исключения:
-
NoSuchElementException- если строка не найдена -
IllegalStateException- если этот сканер закрыт
findInLine
public String findInLine(String pattern)
Пытается найти следующее вхождение шаблона, созданного из указанной строки, игнорируя разделители.
Вызов этого метода в форме findInLine(pattern) ведет себя точно так же, как вызов findInLine(Pattern.compile(pattern)).
- Параметры:
-
pattern- строка, определяющая шаблон для поиска - Возвращает:
- текст, который соответствовал указанному шаблону
- Исключения:
-
IllegalStateException- если этот сканер закрыт
findInLine
public String findInLine(Pattern pattern)
Пытается найти следующее вхождение указанного шаблона, игнорируя разделители. Если шаблон найден до следующего разделителя строк, сканер перемещается за ввод, который соответствовал, и возвращает строку, которая соответствовала шаблону. Если такой шаблон не обнаружен в вводе до следующего разделителя строк, то возвращается null и позиция сканера не изменяется. Этот метод может блокироваться, ожидая ввода, соответствующего шаблону.
Поскольку этот метод продолжает поиск по вводу в поисках указанного шаблона, он может буферизовать весь ввод в поисках нужного токена, если разделители строк отсутствуют.
- Параметры:
-
pattern- шаблон для сканирования - Возвращает:
- текст, который соответствовал указанному шаблону
- Исключения:
-
IllegalStateException- если этот сканер закрыт
findWithinHorizon
public String findWithinHorizon(String pattern,
int horizon) Пытается найти следующее вхождение шаблона, созданного из указанной строки, игнорируя разделители.
Вызов этого метода в форме findWithinHorizon(pattern) ведет себя точно так же, как вызов findWithinHorizon(Pattern.compile(pattern, horizon)).
- Параметры:
-
pattern- строка, определяющая шаблон для поиска -
horizon- горизонт поиска - Возвращает:
- текст, который соответствовал указанному шаблону
- Исключения:
-
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если горизонт отрицательный
findWithinHorizon
public String findWithinHorizon(Pattern pattern,
int horizon) Пытается найти следующее вхождение указанного шаблона.
Этот метод ищет по вводу до указанного горизонта поиска, игнорируя разделители. Если шаблон найден, сканер перемещается за ввод, который соответствовал, и возвращает строку, которая соответствовала шаблону. Если такой шаблон не обнаружен, возвращается null, и позиция сканера остается неизменной. Этот метод может блокироваться, ожидая ввода, соответствующего шаблону.
Сканер никогда не будет искать более horizon кодов символов за пределами своей текущей позиции. Обратите внимание, что результат совпадения может быть усечен горизонтом; то есть произвольный результат совпадения мог быть другим, если горизонт был больше. Сканер обрабатывает горизонт как прозрачную, не закрепляющую границу (см. Matcher.useTransparentBounds(boolean) и Matcher.useAnchoringBounds(boolean)).
Если горизонт 0, то горизонт игнорируется, и этот метод продолжает поиск по вводу в поисках указанного шаблона без ограничений. В этом случае он может буферизовать весь ввод в поисках шаблона.
Если горизонт отрицательный, то генерируется исключение IllegalArgumentException.
- Параметры:
-
pattern- шаблон для сканирования -
horizon- горизонт поиска - Возвращает:
- текст, который соответствовал указанному шаблону
- Исключения:
-
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если горизонт отрицательный
skip
public Scanner skip(Pattern pattern)
Пропускает ввод, соответствующий указанному шаблону, игнорируя разделители. Этот метод пропустит ввод, если закрепленное соответствие указанному шаблону будет успешным.
Если соответствие указанному шаблону не найдено в текущей позиции, то ввод не пропускается и генерируется исключение NoSuchElementException.
Поскольку этот метод ищет соответствие указанному шаблону, начиная с текущей позиции сканера, шаблоны, которые могут соответствовать большому объему ввода (например, ".*"), могут привести к буферизации большого объема ввода сканером.
Обратите внимание, что можно пропустить что-либо, не рискуя NoSuchElementException с помощью шаблона, который может ничего не соответствовать, например, sc.skip("[ \t]*").
- Параметры:
-
pattern- строка, определяющая шаблон для пропуска - Возвращает:
- сканер
- Исключения:
-
NoSuchElementException- если указанный шаблон не найден -
IllegalStateException- если этот сканер закрыт
skip
public Scanner skip(String pattern)
Пропускает ввод, соответствующий шаблону, созданному из указанной строки.
Вызов этого метода в форме skip(pattern) ведет себя точно так же, как вызов skip(Pattern.compile(pattern)).
- Параметры:
-
pattern- строка, определяющая шаблон для пропуска - Возвращает:
- сканер
- Исключения:
-
IllegalStateException- если этот сканер закрыт
hasNextBoolean
public boolean hasNextBoolean()
Возвращает true, если следующий токен в вводе этого сканера может быть интерпретирован как булево значение с помощью нечувствительного к регистру шаблона, созданного из строки "true|false". Сканер не перемещается дальше по вводу, который соответствовал.
- Возвращает:
- true, если и только если следующий токен сканера — это корректное булево значение
- Исключения:
-
IllegalStateException- если этот сканер закрыт
nextBoolean
public boolean nextBoolean()
Сканирует следующий токен входных данных в булево значение и возвращает это значение. Этот метод выбросит InputMismatchException , если следующий токен не может быть преобразован в действительное булево значение. Если соответствие найдено, сканер пропускает входные данные, которые соответствуют.
- Возвращает:
- булево значение, прочитанное из входных данных
- Выбрасывает:
-
InputMismatchException- если следующий токен не является допустимым булевым значением -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
hasNextByte
public boolean hasNextByte()
Возвращает true, если следующий токен ввода этого сканера можно интерпретировать как значение типа byte в стандартной системе счисления с помощью метода nextByte(). Сканер не пропускает какие-либо входные данные.
- Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа byte
- Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
hasNextByte
public boolean hasNextByte(int radix)
Возвращает true, если следующий токен ввода этого сканера можно интерпретировать как значение типа byte в указанной системе счисления с помощью метода nextByte(). Сканер не пропускает какие-либо входные данные.
- Параметры:
-
radix- система счисления, используемая для интерпретации токена как значения типа byte - Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа byte
- Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
nextByte
public byte nextByte()
Сканирует следующий токен ввода как byte.
Вызов этого метода в форме nextByte() ведет себя точно так же, как вызов nextByte(radix), где radix - это стандартная система счисления этого сканера.
- Возвращает:
- сканированное значение типа
byteиз входных данных - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне допустимого диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
nextByte
public byte nextByte(int radix)
Сканирует следующий токен ввода как byte. Этот метод выбросит InputMismatchException , если следующий токен не может быть преобразован в допустимое значение типа byte, как описано ниже. Если преобразование успешно выполнено, сканер пропускает входные данные, которые соответствуют.
Если следующий токен соответствует регулярному выражению Integer, определённому выше, то токен преобразуется в значение типа byte так, как если бы были удалены все локально-зависимые префиксы, разделители групп и локально-зависимые суффиксы, а затем не-ASCII цифры были преобразованы в ASCII цифры через Character.digit, в начало добавляется знак минус (-) если присутствовали локально-зависимые префиксы и суффиксы отрицательных чисел, а полученная строка передаётся в Byte.parseByte с указанной системой счисления.
- Параметры:
-
radix- система счисления, используемая для интерпретации токена как значения типа byte - Возвращает:
- сканированное значение типа
byteиз входных данных - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне допустимого диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
hasNextShort
public boolean hasNextShort()
Возвращает true, если следующий токен ввода этого сканера можно интерпретировать как значение типа short в стандартной системе счисления с помощью метода nextShort(). Сканер не пропускает какие-либо входные данные.
- Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа short в стандартной системе счисления
- Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
hasNextShort
public boolean hasNextShort(int radix)
Возвращает true, если следующий токен ввода этого сканера можно интерпретировать как значение типа short в указанной системе счисления с помощью метода nextShort(). Сканер не пропускает какие-либо входные данные.
- Параметры:
-
radix- система счисления, используемая для интерпретации токена как значения типа short - Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа short в указанной системе счисления
- Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
nextShort
public short nextShort()
Сканирует следующий токен ввода как short.
Вызов этого метода в форме nextShort() ведет себя точно так же, как вызов nextShort(radix), где radix - это стандартная система счисления этого сканера.
- Возвращает:
- сканированное значение типа
shortиз входных данных - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне допустимого диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
nextShort
public short nextShort(int radix)
Сканирует следующий токен ввода как short. Этот метод выбросит InputMismatchException , если следующий токен не может быть преобразован в допустимое значение типа short, как описано ниже. Если преобразование успешно выполнено, сканер пропускает входные данные, которые соответствуют.
Если следующий токен соответствует регулярному выражению Integer, определённому выше, то токен преобразуется в значение типа short так, как если бы были удалены все локально-зависимые префиксы, разделители групп и локально-зависимые суффиксы, а затем не-ASCII цифры были преобразованы в ASCII цифры через Character.digit, в начало добавляется знак минус (-) если присутствовали локально-зависимые префиксы и суффиксы отрицательных чисел, а полученная строка передаётся в Short.parseShort с указанной системой счисления.
- Параметры:
-
radix- система счисления, используемая для интерпретации токена как значения типа short - Возвращает:
- сканированное значение типа
shortиз входных данных - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне допустимого диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
hasNextInt
public boolean hasNextInt()
Возвращает true, если следующий токен ввода этого сканера можно интерпретировать как значение типа int в стандартной системе счисления с помощью метода nextInt(). Сканер не пропускает какие-либо входные данные.
- Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа int
- Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
hasNextInt
public boolean hasNextInt(int radix)
Возвращает true, если следующий токен ввода этого сканера можно интерпретировать как значение типа int в указанной системе счисления с помощью метода nextInt(). Сканер не пропускает какие-либо входные данные.
- Параметры:
-
radix- система счисления, используемая для интерпретации токена как значения типа int - Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа int
- Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
nextInt
public int nextInt()
Сканирует следующий токен ввода как int.
Вызов этого метода в форме nextInt() ведет себя точно так же, как вызов nextInt(radix), где radix - это стандартная система счисления этого сканера.
- Возвращает:
- сканированное значение типа
intиз входных данных - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне допустимого диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
nextInt
public int nextInt(int radix)
Сканирует следующий токен ввода как int. Этот метод выбросит InputMismatchException , если следующий токен не может быть преобразован в допустимое значение типа int, как описано ниже. Если преобразование успешно выполнено, сканер пропускает входные данные, которые соответствуют.
Если следующий токен соответствует регулярному выражению Integer, определённому выше, то токен преобразуется в значение типа int так, как если бы были удалены все локально-зависимые префиксы, разделители групп и локально-зависимые суффиксы, а затем не-ASCII цифры были преобразованы в ASCII цифры через Character.digit, в начало добавляется знак минус (-) если присутствовали локально-зависимые префиксы и суффиксы отрицательных чисел, а полученная строка передаётся в Integer.parseInt с указанной системой счисления.
- Параметры:
-
radix- система счисления, используемая для интерпретации токена как значения типа int - Возвращает:
- сканированное значение типа
intиз входных данных - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне допустимого диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
hasNextLong
public boolean hasNextLong()
Возвращает true, если следующий токен ввода этого сканера можно интерпретировать как значение типа long в стандартной системе счисления с помощью метода nextLong(). Сканер не пропускает какие-либо входные данные.
- Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа long
- Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
hasNextLong
public boolean hasNextLong(int radix)
Возвращает true, если следующий токен ввода этого сканера можно интерпретировать как значение типа long в указанной системе счисления с помощью метода nextLong(). Сканер не пропускает какие-либо входные данные.
- Параметры:
-
radix- система счисления, используемая для интерпретации токена как значения типа long - Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа long
- Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
nextLong
public long nextLong()
Сканирует следующий токен входных данных как long.
Вызов этого метода в форме nextLong() ведет себя точно так же, как вызов nextLong(radix), где radix — это основание по умолчанию для этого сканера.
- Возвращает:
- сканированное из входных данных
long - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или выходит за пределы диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
nextLong
public long nextLong(int radix)
Сканирует следующий токен входных данных как long. Этот метод выбросит InputMismatchException, если следующий токен не может быть преобразован в допустимое значение long, как описано ниже. Если преобразование выполнено успешно, сканер переходит к входным данным, которые соответствовали.
Если следующий токен соответствует регулярному выражению Integer, определённому выше, то токен преобразуется в значение long так, как если бы все локально-специфичные префиксы, разделители групп и локально-специфичные суффиксы были удалены, затем не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, отрицательный знак (-) был добавлен в начало, если были присутствуют локально-специфичные префиксы и суффиксы отрицательного числа, и полученная строка была передана в Long.parseLong с указанным основанием.
- Параметры:
-
radix- основание, используемое для интерпретации токена как целого значения - Возвращает:
- сканированное из входных данных
long - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или выходит за пределы диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
hasNextFloat
public boolean hasNextFloat()
Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как значение float с помощью метода nextFloat(). Сканер не переходит к каким-либо входным данным.
- Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением float
- Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
nextFloat
public float nextFloat()
Сканирует следующий токен входных данных как float. Этот метод выбросит InputMismatchException, если следующий токен не может быть преобразован в допустимое значение float, как описано ниже. Если преобразование выполнено успешно, сканер переходит к входным данным, которые соответствовали.
Если следующий токен соответствует регулярному выражению Float, определённому выше, то токен преобразуется в значение float так, как если бы все локально-специфичные префиксы, разделители групп и локально-специфичные суффиксы были удалены, затем не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, отрицательный знак (-) был добавлен в начало, если были присутствуют локально-специфичные префиксы и суффиксы отрицательного числа, и полученная строка была передана в Float.parseFloat. Если токен соответствует локализованным строкам NaN или бесконечности, то «Nan» или «Infinity» соответственно передаются в Float.parseFloat.
- Возвращает:
- сканированное из входных данных
float - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Float или выходит за пределы диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
hasNextDouble
public boolean hasNextDouble()
Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как значение double с помощью метода nextDouble(). Сканер не переходит к каким-либо входным данным.
- Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением double
- Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
nextDouble
public double nextDouble()
Сканирует следующий токен входных данных как double. Этот метод выбросит InputMismatchException, если следующий токен не может быть преобразован в допустимое значение double. Если преобразование выполнено успешно, сканер переходит к входным данным, которые соответствовали.
Если следующий токен соответствует регулярному выражению Float, определённому выше, то токен преобразуется в значение double так, как если бы все локально-специфичные префиксы, разделители групп и локально-специфичные суффиксы были удалены, затем не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, отрицательный знак (-) был добавлен в начало, если были присутствуют локально-специфичные префиксы и суффиксы отрицательного числа, и полученная строка была передана в Double.parseDouble. Если токен соответствует локализованным строкам NaN или бесконечности, то «Nan» или «Infinity» соответственно передаются в Double.parseDouble.
- Возвращает:
- сканированное из входных данных
double - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Float или выходит за пределы диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
hasNextBigInteger
public boolean hasNextBigInteger()
Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как BigInteger в основании по умолчанию с помощью метода nextBigInteger(). Сканер не переходит к каким-либо входным данным.
- Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым
BigInteger - Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
hasNextBigInteger
public boolean hasNextBigInteger(int radix)
Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как BigInteger в указанном основании с помощью метода nextBigInteger(). Сканер не переходит к каким-либо входным данным.
- Параметры:
-
radix- основание, используемое для интерпретации токена как целого числа - Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым
BigInteger - Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
nextBigInteger
public BigInteger nextBigInteger()
Сканирует следующий токен входных данных как BigInteger.
Вызов этого метода в форме nextBigInteger() ведет себя точно так же, как вызов nextBigInteger(radix), где radix — это основание по умолчанию для этого сканера.
- Возвращает:
- сканированное из входных данных
BigInteger - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или выходит за пределы диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
nextBigInteger
public BigInteger nextBigInteger(int radix)
Сканирует следующий токен входных данных как BigInteger.
Если следующий токен соответствует регулярному выражению Integer, определённому выше, то токен преобразуется в значение BigInteger так, как если бы все разделители групп были удалены, не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, и полученная строка была передана в конструктор BigInteger(String, int) с указанным основанием.
- Параметры:
-
radix- основание, используемое для интерпретации токена - Возвращает:
- сканированное из входных данных
BigInteger - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или выходит за пределы диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
hasNextBigDecimal
public boolean hasNextBigDecimal()
Возвращает true, если следующий токен в входных данных этого сканера может быть интерпретирован как BigDecimal с помощью метода nextBigDecimal(). Сканер не переходит к каким-либо входным данным.
- Возвращает:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым
BigDecimal - Выбрасывает:
-
IllegalStateException- если этот сканер закрыт
nextBigDecimal
public BigDecimal nextBigDecimal()
Сканирует следующий токен входных данных как BigDecimal.
Если следующий токен соответствует регулярному выражению Decimal, определённому выше, то токен преобразуется в значение BigDecimal так, как если бы все разделители групп были удалены, не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, и полученная строка была передана в конструктор BigDecimal(String).
- Возвращает:
- сканированное из входных данных
BigDecimal - Выбрасывает:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Decimal или выходит за пределы диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
reset
public Scanner reset()
Сбрасывает этот сканер.
Сброс сканера отбрасывает всю его явную информацию о состоянии, которая могла быть изменена вызовами useDelimiter(java.util.regex.Pattern), useLocale(java.util.Locale) или useRadix(int).
Вызов этого метода в форме scanner.reset() ведет себя точно так же, как вызов
scanner.useDelimiter("\\p{javaWhitespace}+")
.useLocale(Locale.getDefault(Locale.Category.FORMAT))
.useRadix(10);
- Возвращает:
- этот сканер
- С:
- 1.6
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.