Класс 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() могут блокироваться в ожидании дополнительных входных данных. Блокирование метода hasNext() не связано с тем, будет ли блокироваться связанный с ним метод next(). Метод tokens() также может блокироваться в ожидании входных данных.
Методы findInLine(), findWithinHorizon(), skip() и findAll() работают независимо от шаблона разделителя. Эти методы будут пытаться сопоставить указанный шаблон с входными данными, не обращая внимания на разделители, и поэтому могут использоваться в особых случаях, когда разделители не имеют значения. Эти методы могут блокироваться в ожидании дополнительных входных данных.
Когда сканер выбрасывает исключение InputMismatchException, сканер не пропускает токен, вызвавший исключение, чтобы он мог быть получен или пропущен с помощью другого метода.
В зависимости от типа шаблона разделителя, могут возвращаться пустые токены. Например, шаблон "\\s+" не возвращает пустых токенов, так как он соответствует нескольким экземплярам разделителя. Шаблон разделителя "\\s" может возвращать пустые токены, так как он пропускает только один пробел за раз.
Сканер может считывать текст из любого объекта, реализующего интерфейс Readable. Если вызов метода read() базового объекта, реализующего интерфейс чтения, генерирует исключение IOException, то сканер предполагает, что достигнут конец входных данных. Последнее исключение, сгенерированное базовым объектом, реализующим интерфейс чтения, можно получить с помощью метода ioException().
При закрытии сканера он закроет свой источник ввода, если этот источник реализует интерфейс Closeable.
Сканер не является потокобезопасным без внешней синхронизации.
Если не указано иное, передача параметра null в любой метод сканера вызовет исключение NullPointerException.
Сканер по умолчанию интерпретирует числа как десятичные, если не установлено другое основание с помощью метода useRadix(int). Метод reset() сбросит значение основания сканера до 10 независимо от того, было ли оно изменено ранее.
Локализованные числа
Экземпляр этого класса может сканировать числа в стандартных форматах, а также в форматах локали сканера. Изначальная локали сканера — это значение, возвращаемое методом Locale.getDefault(Locale.Category.FORMAT); её можно изменить с помощью метода useLocale(). Метод reset() сбросит значение локали сканера до начальной локали независимо от того, была ли она изменена ранее.
Локализованные форматы определяются следующими параметрами, которые для конкретной локали берутся из объекта DecimalFormat этой локали, df, и его объекта DecimalFormatSymbols, dfs.
- Разделитель группирования
- Символ, используемый для разделения групп тысяч, т.е.
dfs.getGroupingSeparator()- Десятичный разделитель
- Символ, используемый для десятичной точки, т.е.
dfs.getDecimalSeparator()- Позитивный префикс
- Строка, которая появляется перед положительным числом (может быть пустой), т.е.
df.getPositivePrefix()- Позитивный суффикс
- Строка, которая появляется после положительного числа (может быть пустой), т.е.
df.getPositiveSuffix()- Отрицательный префикс
- Строка, которая появляется перед отрицательным числом (может быть пустой), т.е.
df.getNegativePrefix()- Отрицательный суффикс
- Строка, которая появляется после отрицательного числа (может быть пустой), т.е.
df.getNegativeSuffix()- Не число
- Строка, представляющая не число для значений с плавающей точкой, т.е.
dfs.getNaN()- Бесконечность
- Строка, представляющая бесконечность для значений с плавающей точкой, т.е.
dfs.getInfinity()
Синтаксис чисел
Строки, которые могут быть проанализированы как числа экземпляром этого класса, задаются в грамматике регулярных выражений, где Rmax — наибольшая цифра в используемом основании (например, Rmax — 9 в десятичной системе).
- НеASCIIцифра:
- Не-ASCII символ c, для которого
Character.isDigit(c)возвращает true - Не 0 цифра:
-
[1-Rmax] |НеASCIIцифра - Цифра:
-
[0-Rmax] |НеASCIIцифра - Сгруппированное число:
-
(Не 0 цифра Цифра?Цифра?(Разделитель группирования Цифра Цифра Цифра)+ ) - Число:
-
( (Цифра+ ) |Сгруппированное число) - Целое число:
-
( [-+]? (Число) )|Позитивный префикс Число Позитивный суффикс|Отрицательный префикс Число Отрицательный суффикс - Десятичное число:
-
Число
|Число Десятичный разделитель Цифра*|Десятичный разделитель Цифра+ - Порядок:
-
( [eE] [+-]?Цифра+ ) - Десятичное число:
-
( [-+]?Десятичное число Порядок? )|Позитивный префикс Десятичное число Позитивный суффикс Порядок?|Отрицательный префикс Десятичное число Отрицательный суффикс Порядок? - Шестнадцатеричное число с плавающей точкой:
-
[-+]? 0[xX][0-9a-fA-F]*\.[0-9a-fA-F]+ ([pP][-+]?[0-9]+)? - Не число:
-
NaN |Не число| Infinity |Бесконечность - Означенное не число:
-
( [-+]?Не число)|Позитивный префикс Не число Позитивный суффикс|Отрицательный префикс Не число Отрицательный суффикс - Число с плавающей точкой:
-
Десятичное число
|Шестнадцатеричное число с плавающей точкой|Означенное не число
Пробелы не учитываются в вышеприведённых регулярных выражениях.
- С:
- 1.5
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного файла. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного файла. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного файла. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного потока ввода. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного потока ввода. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного потока ввода. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного источника. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанной строки. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного канала. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного канала. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного канала. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного файла. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного файла. |
Scanner |
Создаёт новый Scanner, который генерирует значения, считанные из указанного файла. |
Краткое описание методов
| Modifier and Type | Method | Description |
|---|---|---|
void |
close() |
Закрывает этот сканер. |
Pattern |
delimiter() |
Возвращает Pattern , которое используется этим Scanner в настоящее время для сопоставления разделителей. |
Stream<MatchResult> |
findAll |
Возвращает поток результатов сопоставления, которые соответствуют указанной строке шаблона. |
Stream<MatchResult> |
findAll |
Возвращает поток результатов сопоставления из этого сканера. |
String |
findInLine |
Попытка найти следующее вхождение шаблона, построенного из указанной строки, игнорируя разделители. |
String |
findInLine |
Попытка найти следующее вхождение указанного шаблона, игнорируя разделители. |
String |
findWithinHorizon |
Попытка найти следующее вхождение шаблона, построенного из указанной строки, игнорируя разделители. |
String |
findWithinHorizon |
Попытка найти следующее вхождение указанного шаблона. |
boolean |
hasNext() |
Возвращает true, если в вводе этого сканера есть другой токен. |
boolean |
hasNext |
Возвращает true, если следующий токен соответствует шаблону, построенному из указанной строки. |
boolean |
hasNext |
Возвращает true, если следующий полный токен соответствует указанному шаблону. |
boolean |
hasNextBigDecimal() |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как BigDecimal с использованием метода nextBigDecimal(). |
boolean |
hasNextBigInteger() |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как BigInteger в стандартном формате, используя метод nextBigInteger(). |
boolean |
hasNextBigInteger |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как BigInteger в указанном формате, используя метод nextBigInteger(). |
boolean |
hasNextBoolean() |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как булево значение, используя регистронезависимый шаблон, созданный из строки "true|false". |
boolean |
hasNextByte() |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как значение типа byte в стандартном формате, используя метод nextByte(). |
boolean |
hasNextByte |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как значение типа byte в указанном формате, используя метод nextByte(). |
boolean |
hasNextDouble() |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как значение типа double, используя метод nextDouble(). |
boolean |
hasNextFloat() |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как значение типа float, используя метод nextFloat(). |
boolean |
hasNextInt() |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как значение типа int в стандартном формате, используя метод nextInt(). |
boolean |
hasNextInt |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как значение типа int в указанном формате, используя метод nextInt(). |
boolean |
hasNextLine() |
Возвращает true, если в вводе этого сканера есть ещё одна строка. |
boolean |
hasNextLong() |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как значение типа long в стандартном формате, используя метод nextLong(). |
boolean |
hasNextLong |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как значение типа long в указанном формате, используя метод nextLong(). |
boolean |
hasNextShort() |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как значение типа short в стандартном формате, используя метод nextShort(). |
boolean |
hasNextShort |
Возвращает true, если следующий токен в вводе этого сканера можно интерпретировать как значение типа short в указанном формате, используя метод nextShort(). |
IOException |
ioException() |
Возвращает последнее IOException, сгенерированное базовым Readable этого Scanner. |
Locale |
locale() |
Возвращает локаль этого сканера. |
MatchResult |
match() |
Возвращает результат последней операции сканирования, выполненной этим сканером. |
String |
next() |
Находит и возвращает следующий полный токен из этого сканера. |
String |
next |
Возвращает следующий токен, если он соответствует шаблону, построенному из указанной строки. |
String |
next |
Возвращает следующий токен, если он соответствует указанному шаблону. |
BigDecimal |
nextBigDecimal() |
Сканирует следующий токен ввода как BigDecimal. |
BigInteger |
nextBigInteger() |
Сканирует следующий токен ввода как BigInteger. |
BigInteger |
nextBigInteger |
Сканирует следующий токен ввода как BigInteger. |
boolean |
nextBoolean() |
Сканирует следующий токен ввода как булево значение и возвращает это значение. |
byte |
nextByte() |
Сканирует следующий токен ввода как byte. |
byte |
nextByte |
Сканирует следующий токен ввода как byte. |
double |
nextDouble() |
Сканирует следующий токен ввода как double. |
float |
nextFloat() |
Сканирует следующий токен ввода как float. |
int |
nextInt() |
Сканирует следующий токен ввода как int. |
int |
nextInt |
Сканирует следующий токен ввода как int. |
String |
nextLine() |
Перемещает этот сканер за текущую строку и возвращает пропущенный ввод. |
long |
nextLong() |
Сканирует следующий токен ввода как long. |
long |
nextLong |
Сканирует следующий токен ввода как long. |
short |
nextShort() |
Сканирует следующий токен ввода как short. |
short |
nextShort |
Сканирует следующий токен ввода как short. |
int |
radix() |
Возвращает стандартный формат этого сканера. |
void |
remove() |
Операция удаления не поддерживается данной реализацией Iterator. |
Scanner |
reset() |
Сбрасывает этот сканер. |
Scanner |
skip |
Пропускает вход, соответствующий шаблону, построенному из указанной строки. |
Scanner |
skip |
Пропускает входные данные, соответствующие заданному шаблону, игнорируя разделители. |
Stream<String> |
tokens() |
Возвращает поток разделителями-разделенных токенов из этого сканера. |
String |
toString() |
Возвращает строковое представление этого Scanner. |
Scanner |
useDelimiter |
Устанавливает разделяющий шаблон сканера на шаблон, построенный из указанного String. |
Scanner |
useDelimiter |
Устанавливает разделяющий шаблон сканера на указанный шаблон. |
Scanner |
useDelimiter |
Устанавливает локаль сканера на указанную локаль. |
Scanner |
useRadix |
Устанавливает стандартный радикс сканера на указанный радикс. |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе java.util.Iterator
forEachRemaining
Подробное описание конструкторов
Scanner
public Scanner(Readable source)
- Параметры:
-
source- Источник символов, реализующий интерфейсReadable
Scanner
public Scanner(InputStream source)
- Параметры:
-
source- Поток ввода для считывания
Scanner
public Scanner(InputStream source, String charsetName)
- Параметры:
-
source- Поток ввода для считывания -
charsetName- Тип кодировки для преобразования байтов из потока в символы для считывания - Исключения:
-
IllegalArgumentException- если указанный набор символов не существует
Scanner
public Scanner(InputStream source, Charset charset)
- Параметры:
-
source- поток ввода для считывания -
charset- кодировка, используемая для преобразования байтов из файла в символы для считывания - С тех пор как:
- 10
Scanner
public Scanner(File source) throws FileNotFoundException
- Параметры:
-
source- Файл для считывания - Исключения:
-
FileNotFoundException- если источник не найден
Scanner
public Scanner(File source, String charsetName) throws FileNotFoundException
- Параметры:
-
source- Файл для считывания -
charsetName- Тип кодировки для преобразования байтов из файла в символы для считывания - Исключения:
-
FileNotFoundException- если источник не найден -
IllegalArgumentException- если указанная кодировка не найдена
Scanner
public Scanner(File source, Charset charset) throws IOException
- Параметры:
-
source- Файл для считывания -
charset- Кодировка, используемая для преобразования байтов из файла в символы для считывания - Исключения:
-
IOException- если при открытии источника произошла ошибка ввода-вывода - С тех пор как:
- 10
Scanner
public Scanner(Path source) throws IOException
- Параметры:
-
source- путь к файлу для считывания - Исключения:
-
IOException- если при открытии источника произошла ошибка ввода-вывода - С тех пор как:
- 1.7
Scanner
public Scanner(Path source, String charsetName) throws IOException
- Параметры:
-
source- путь к файлу для считывания -
charsetName- Тип кодировки для преобразования байтов из файла в символы для считывания - Исключения:
-
IOException- если при открытии источника произошла ошибка ввода-вывода -
IllegalArgumentException- если указанная кодировка не найдена - С тех пор как:
- 1.7
Scanner
public Scanner(Path source, Charset charset) throws IOException
- Параметры:
-
source- путь к файлу для считывания -
charset- кодировка, используемая для преобразования байтов из файла в символы для считывания - Исключения:
-
IOException- если при открытии источника произошла ошибка ввода-вывода - С тех пор как:
- 10
Scanner
public Scanner(String source)
- Параметры:
-
source- Строка для считывания
Scanner
public Scanner(ReadableByteChannel source)
- Параметры:
-
source- Канал для считывания
Scanner
public Scanner(ReadableByteChannel source, String charsetName)
- Параметры:
-
source- Канал для считывания -
charsetName- Тип кодировки для преобразования байтов из канала в символы для считывания - Исключения:
-
IllegalArgumentException- если указанный набор символов не существует
Scanner
public Scanner(ReadableByteChannel source, Charset charset)
- Параметры:
-
source- канал для считывания -
charset- тип кодировки для преобразования байтов из канала в символы для считывания - С тех пор как:
- 10
Подробное описание методов
close
public void close()
Если этот сканер ещё не закрыт, то если его базовый readable также реализует интерфейс Closeable, то метод close базового readable будет вызван. Если этот сканер уже закрыт, вызов этого метода не повлияет.
Попытка выполнить операции поиска после закрытия сканера приведёт к исключению IllegalStateException.
- Определено в:
-
closeв интерфейсеAutoCloseable - Определено в:
-
closeв интерфейсеCloseable
ioException
public IOException ioException()
Readable сканера. Метод возвращает null если такое исключение не существует.- Возвращает:
- последнее исключение, брошенное readable сканера
delimiter
public Pattern delimiter()
- Возвращает:
- шаблон разделителя сканера.
useDelimiter
public Scanner useDelimiter(Pattern pattern)
- Параметры:
-
pattern- шаблон разделителя - Возвращает:
- этот сканер
useDelimiter
public Scanner useDelimiter(String pattern)
Вызов этого метода в форме 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(), который возвращает int, этот метод возвращает результат MatchResult для поиска регулярного выражения Integer, определённого выше. Аналогично методы findInLine(), findWithinHorizon() и skip() сделают результат сопоставления доступным, если они завершатся успешно.
- Возвращает:
- результат сопоставления последней операции сопоставления
- Изначает исключение:
-
IllegalStateException- если результат сопоставления недоступен
toString
public String toString()
Возвращает строковое представление этого Scanner. Строковое представление Scanner содержит информацию, которая может быть полезна для отладки. Точный формат не определён.
- Переопределяет:
-
toStringв классеObject - Возвращает:
- Строковое представление этого сканера
hasNext
public boolean hasNext()
- Задано:
-
hasNextв интерфейсеIterator<String> - Возвращает:
- true, если и только если в этом сканере есть ещё один токен
- Изначает исключение:
-
IllegalStateException- если этот сканер закрыт - См. также:
next
public String next()
hasNext() возвратил true.- Задано:
-
nextв интерфейсеIterator<String> - Возвращает:
- следующий токен
- Изначает исключение:
-
NoSuchElementException- если больше нет токенов -
IllegalStateException- если этот сканер закрыт - См. также:
remove
public void remove()
Iterator.- Задано:
-
removeв интерфейсеIterator<String> - Изначает исключение:
-
UnsupportedOperationException- если этот метод вызывается. - См. также:
hasNext
public boolean hasNext(String pattern)
Вызов этого метода в форме 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)
- Параметры:
-
pattern- шаблон для поиска - Возвращает:
- true, если и только если в этом сканере есть ещё один токен, соответствующий указанному шаблону
- Изначает исключение:
-
IllegalStateException- если этот сканер закрыт
next
public String next(Pattern pattern)
hasNext(Pattern) возвратил true. Если сопоставление выполнено, сканер продвигается дальше по входным данным, которые соответствуют шаблону.- Параметры:
-
pattern- шаблон для поиска - Возвращает:
- следующий токен
- Изначает исключение:
-
NoSuchElementException- если больше нет токенов -
IllegalStateException- если этот сканер закрыт
hasNextLine
public boolean hasNextLine()
- Возвращает:
- 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 и позиция сканера не изменяется. Этот метод может блокироваться, ожидая вход, соответствующий шаблону. Поскольку этот метод продолжает поиск по вводу, ища указанный шаблон, он может буферизовать весь вход, ища нужный токен, если разделителей строк нет.
- Parameters:
-
pattern- шаблон для сканирования - Returns:
- текст, соответствующий указанному шаблону
- Throws:
-
IllegalStateException- если этот сканер закрыт
findWithinHorizon
public String findWithinHorizon(String pattern, int horizon)
Вызов этого метода в форме findWithinHorizon(pattern) ведет себя точно так же, как вызов findWithinHorizon(Pattern.compile(pattern), horizon).
- Parameters:
-
pattern- строка, определяющая шаблон для поиска -
horizon- горизонт поиска - Returns:
- текст, соответствующий указанному шаблону
- Throws:
-
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если горизонт отрицательный
findWithinHorizon
public String findWithinHorizon(Pattern pattern, int horizon)
Этот метод выполняет поиск по вводу до заданного горизонта поиска, игнорируя разделители. Если шаблон найден, сканер перемещается за вход, соответствующий ему, и возвращает строку, которая соответствовала шаблону. Если такой шаблон не обнаружен, возвращается null, и положение сканера остается неизменным. Этот метод может блокироваться, ожидая вход, соответствующий шаблону.
Сканер никогда не будет искать более horizon символов за пределами своей текущей позиции. Обратите внимание, что совпадение может быть ограничено горизонтом; то есть произвольный результат совпадения мог быть другим, если бы горизонт был больше. Сканер обрабатывает горизонт как прозрачную, не привязанную к началу границу (см. Matcher.useTransparentBounds(boolean) и Matcher.useAnchoringBounds(boolean)).
Если горизонт 0, то горизонт игнорируется, и этот метод продолжает поиск по вводу, ища указанный шаблон без ограничений. В этом случае он может буферизовать весь вход, ища шаблон.
Если горизонт отрицательный, выбрасывается исключение IllegalArgumentException.
- Parameters:
-
pattern- шаблон для сканирования -
horizon- горизонт поиска - Returns:
- текст, соответствующий указанному шаблону
- Throws:
-
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если горизонт отрицательный
skip
public Scanner skip(Pattern pattern)
Если совпадение указанного шаблона не найдено в текущей позиции, то вход не пропускается и выбрасывается исключение NoSuchElementException.
Поскольку этот метод пытается сопоставить указанный шаблон, начиная с текущей позиции сканера, шаблоны, которые могут соответствовать большому количеству ввода (например, ".*"), могут привести к буферизации большого объема ввода.
Обратите внимание, что можно пропустить что-либо, не рискуя получить NoSuchElementException, используя шаблон, который не может ничего сопоставить, например, sc.skip("[ \t]*").
- Parameters:
-
pattern- строка, определяющая шаблон для пропуска - Returns:
- этот сканер
- Throws:
-
NoSuchElementException- если указанный шаблон не найден -
IllegalStateException- если этот сканер закрыт
skip
public Scanner skip(String pattern)
Вызов этого метода в форме skip(pattern) ведет себя точно так же, как вызов skip(Pattern.compile(pattern)).
- Parameters:
-
pattern- строка, определяющая шаблон для пропуска - Returns:
- этот сканер
- Throws:
-
IllegalStateException- если этот сканер закрыт
hasNextBoolean
public boolean hasNextBoolean()
- Returns:
- true, если и только если следующий токен этого сканера является допустимым булевым значением
- Throws:
-
IllegalStateException- если этот сканер закрыт
nextBoolean
public boolean nextBoolean()
InputMismatchException, если следующий токен не может быть преобразован в допустимое булево значение. Если совпадение успешно, сканер перемещается дальше ввода, которому соответствует.- Returns:
- сканированное булево значение из ввода
- Throws:
-
InputMismatchException- если следующий токен не является допустимым булевым значением -
NoSuchElementException- если вход исчерпан -
IllegalStateException- если этот сканер закрыт
hasNextByte
public boolean hasNextByte()
nextByte(). Сканер не перемещается дальше ввода.- Returns:
- true, если и только если следующий токен этого сканера является допустимым значением типа byte
- Throws:
-
IllegalStateException- если этот сканер закрыт
hasNextByte
public boolean hasNextByte(int radix)
nextByte(). Сканер не перемещается дальше ввода. Если система счисления меньше Character.MIN_RADIX или больше Character.MAX_RADIX, то выбрасывается исключение IllegalArgumentException.
- Parameters:
-
radix- система счисления, используемая для интерпретации токена как значения типа byte - Returns:
- true, если и только если следующий токен этого сканера является допустимым значением типа byte
- Throws:
-
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если система счисления находится вне допустимого диапазона
nextByte
public byte nextByte()
byte. Вызов этого метода в форме nextByte() ведет себя точно так же, как вызов nextByte(radix), где radix является стандартной системой счисления этого сканера.
- Returns:
- сканированное
byteиз ввода - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона -
NoSuchElementException- если вход исчерпан -
IllegalStateException- если этот сканер закрыт
nextByte
public byte nextByte(int radix)
byte. Этот метод выбросит InputMismatchException, если следующий токен не может быть преобразован в допустимое значение типа byte, как описано ниже. Если преобразование выполняется успешно, сканер перемещается дальше ввода, которому соответствует. Если следующий токен соответствует регулярному выражению Integer, определенному выше, то токен преобразуется в значение типа byte так, как если бы все локальные префиксы, разделители групп и локальные суффиксы были удалены, затем не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, перед этим был префиксный знак «-», если присутствовали локальные префиксы и суффиксы отрицательных значений, и полученная строка была передана в Byte.parseByte с указанной системой счисления.
Если система счисления меньше Character.MIN_RADIX или больше Character.MAX_RADIX, то выбрасывается исключение IllegalArgumentException.
- Parameters:
-
radix- система счисления, используемая для интерпретации токена как значения типа byte - Returns:
- сканированное
byteиз ввода - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона -
NoSuchElementException- если вход исчерпан -
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если система счисления находится вне допустимого диапазона
hasNextShort
public boolean hasNextShort()
nextShort(). Сканер не перемещается дальше ввода.- Returns:
- true, если и только если следующий токен этого сканера является допустимым значением типа short в стандартной системе счисления
- Throws:
-
IllegalStateException- если этот сканер закрыт
hasNextShort
public boolean hasNextShort(int radix)
nextShort(). Сканер не перемещается дальше по входным данным. Если радикс меньше Character.MIN_RADIX или больше Character.MAX_RADIX, то выбрасывается IllegalArgumentException.
- Parameters:
-
radix- радикс, используемый для интерпретации токена как значения типа short - Returns:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа short в указанном радиксе
- Throws:
-
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если радикс вне допустимого диапазона
nextShort
public short nextShort()
short. Вызов этого метода в форме nextShort() ведет себя точно так же, как вызов nextShort(radix), где radix - это значение по умолчанию для радикса этого сканера.
- Returns:
- сканированное значение типа
shortиз входных данных - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
nextShort
public short nextShort(int radix)
short. Этот метод выбросит InputMismatchException , если следующий токен нельзя преобразовать в допустимое значение типа short, как описано ниже. Если преобразование успешно, сканер перемещается дальше по входным данным, которые соответствуют шаблону. Если следующий токен соответствует регулярному выражению Integer, определенному выше, то токен преобразуется в значение типа short так, как если бы все локально-зависимые префиксы, разделители групп и локально-зависимые суффиксы были удалены, не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, префикс "-" добавлялся, если присутствовали локально-зависимые префиксы и суффиксы отрицательных значений, и полученная строка передавалась в Short.parseShort с указанным радиксом.
Если радикс меньше Character.MIN_RADIX или больше Character.MAX_RADIX, то выбрасывается IllegalArgumentException.
- Parameters:
-
radix- радикс, используемый для интерпретации токена как значения типа short - Returns:
- сканированное значение типа
shortиз входных данных - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если радикс вне допустимого диапазона
hasNextInt
public boolean hasNextInt()
nextInt(). Сканер не перемещается дальше по входным данным.- Returns:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа int
- Throws:
-
IllegalStateException- если этот сканер закрыт
hasNextInt
public boolean hasNextInt(int radix)
nextInt(). Сканер не перемещается дальше по входным данным. Если радикс меньше Character.MIN_RADIX или больше Character.MAX_RADIX, то выбрасывается IllegalArgumentException.
- Parameters:
-
radix- радикс, используемый для интерпретации токена как значения типа int - Returns:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа int
- Throws:
-
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если радикс вне допустимого диапазона
nextInt
public int nextInt()
int. Вызов этого метода в форме nextInt() ведет себя точно так же, как вызов nextInt(radix), где radix - это значение по умолчанию для радикса этого сканера.
- Returns:
- сканированное целое число типа
intиз входных данных - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
nextInt
public int nextInt(int radix)
int. Этот метод выбросит InputMismatchException , если следующий токен нельзя преобразовать в допустимое значение типа int, как описано ниже. Если преобразование успешно, сканер перемещается дальше по входным данным, которые соответствуют шаблону. Если следующий токен соответствует регулярному выражению Integer, определенному выше, то токен преобразуется в значение типа int так, как если бы все локально-зависимые префиксы, разделители групп и локально-зависимые суффиксы были удалены, не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, префикс "-" добавлялся, если присутствовали локально-зависимые префиксы и суффиксы отрицательных значений, и полученная строка передавалась в Integer.parseInt с указанным радиксом.
Если радикс меньше Character.MIN_RADIX или больше Character.MAX_RADIX, то выбрасывается IllegalArgumentException.
- Parameters:
-
radix- радикс, используемый для интерпретации токена как значения типа int - Returns:
- сканированное целое число типа
intиз входных данных - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если радикс вне допустимого диапазона
hasNextLong
public boolean hasNextLong()
nextLong(). Сканер не перемещается дальше по входным данным.- Returns:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа long
- Throws:
-
IllegalStateException- если этот сканер закрыт
hasNextLong
public boolean hasNextLong(int radix)
nextLong(). Сканер не перемещается дальше по входным данным. Если радикс меньше Character.MIN_RADIX или больше Character.MAX_RADIX, то выбрасывается IllegalArgumentException.
- Parameters:
-
radix- радикс, используемый для интерпретации токена как значения типа long - Returns:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением типа long
- Throws:
-
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если радикс вне допустимого диапазона
nextLong
public long nextLong()
long. Вызов этого метода в форме nextLong() ведет себя точно так же, как вызов nextLong(radix), где radix - это значение по умолчанию для радикса этого сканера.
- Returns:
- сканированное значение типа
longиз входных данных - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Integer или находится вне диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
nextLong
public long nextLong(int radix)
long. Этот метод выбросит InputMismatchException, если следующий токен не может быть преобразован в действительное значение long, как описано ниже. Если преобразование выполнено успешно, сканер переходит к вводу, который соответствовал. Если следующий токен соответствует регулярному выражению Целое число, определённому выше, то токен преобразуется в значение long, как если бы все локализованные префиксы, разделители групп и суффиксы были удалены, а не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, перед префиксом отрицательного знака (-) в случае присутствия локализованных префиксов и суффиксов, и полученная строка передаётся в Long.parseLong со значением заданного радикса.
Если радикс меньше Character.MIN_RADIX или больше Character.MAX_RADIX, то будет выброшено IllegalArgumentException.
- Parameters:
-
radix- радикс, используемый для интерпретации токена как целого числа - Returns:
- сканированное значение
longиз ввода - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Целое число или находится вне диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если радикс находится вне диапазона
hasNextFloat
public boolean hasNextFloat()
nextFloat(). Сканер не перемещается дальше по вводу.- Returns:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением float
- Throws:
-
IllegalStateException- если этот сканер закрыт
nextFloat
public float nextFloat()
float. Этот метод выбросит InputMismatchException, если следующий токен не может быть преобразован в действительное значение float, как описано ниже. Если преобразование выполнено успешно, сканер переходит к вводу, который соответствовал. Если следующий токен соответствует регулярному выражению Число с плавающей точкой, определённому выше, то токен преобразуется в значение float, как если бы все локализованные префиксы, разделители групп и суффиксы были удалены, а не-ASCII цифры были преобразованы в ASCII цифры с помощью Float.parseFloat, перед префиксом отрицательного знака (-) в случае присутствия локализованных префиксов и суффиксов, и полученная строка передаётся в Float.parseFloat. Если токен соответствует локализованным строкам NaN или бесконечности, то "Nan" или "Infinity" соответственно передаются в Float.parseFloat.
- Returns:
- сканированное значение
floatиз ввода - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Число с плавающей точкой или находится вне диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
hasNextDouble
public boolean hasNextDouble()
nextDouble(). Сканер не перемещается дальше по вводу.- Returns:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым значением double
- Throws:
-
IllegalStateException- если этот сканер закрыт
nextDouble
public double nextDouble()
double. Этот метод выбросит InputMismatchException, если следующий токен не может быть преобразован в действительное значение double. Если преобразование выполнено успешно, сканер переходит к вводу, который соответствовал. Если следующий токен соответствует регулярному выражению Число с плавающей точкой, определённому выше, то токен преобразуется в значение double, как если бы все локализованные префиксы, разделители групп и суффиксы были удалены, а не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, перед префиксом отрицательного знака (-) в случае присутствия локализованных префиксов и суффиксов, и полученная строка передаётся в Double.parseDouble. Если токен соответствует локализованным строкам NaN или бесконечности, то "Nan" или "Infinity" соответственно передаются в Double.parseDouble.
- Returns:
- сканированное значение
doubleиз ввода - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Число с плавающей точкой или находится вне диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
hasNextBigInteger
public boolean hasNextBigInteger()
BigInteger в радиксе по умолчанию с помощью метода nextBigInteger(). Сканер не перемещается дальше по вводу.- Returns:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым
BigInteger - Throws:
-
IllegalStateException- если этот сканер закрыт
hasNextBigInteger
public boolean hasNextBigInteger(int radix)
BigInteger в указанном радиксе с помощью метода nextBigInteger(). Сканер не перемещается дальше по вводу. Если радикс меньше Character.MIN_RADIX или больше Character.MAX_RADIX, то будет выброшено IllegalArgumentException.
- Parameters:
-
radix- радикс, используемый для интерпретации токена как целого числа - Returns:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым
BigInteger - Throws:
-
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если радикс находится вне диапазона
nextBigInteger
public BigInteger nextBigInteger()
BigInteger. Вызов этого метода в форме nextBigInteger() ведёт себя точно так же, как вызов nextBigInteger(radix), где radix - это радикс по умолчанию этого сканера.
- Returns:
- сканированное значение
BigIntegerиз ввода - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Целое число или находится вне диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
nextBigInteger
public BigInteger nextBigInteger(int radix)
BigInteger. Если следующий токен соответствует регулярному выражению Целое число, определённому выше, то токен преобразуется в значение BigInteger как если бы все разделители групп были удалены, а не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, и полученная строка передана в конструктор BigInteger(String, int) со значением указанного радикса.
Если радикс меньше Character.MIN_RADIX или больше Character.MAX_RADIX, то будет выброшено IllegalArgumentException.
- Parameters:
-
radix- радикс, используемый для интерпретации токена - Returns:
- сканированное значение
BigIntegerиз ввода - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Целое число или находится вне диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт -
IllegalArgumentException- если радикс находится вне диапазона
hasNextBigDecimal
public boolean hasNextBigDecimal()
BigDecimal с помощью метода nextBigDecimal(). Сканер не перемещается дальше по вводу.- Returns:
- true тогда и только тогда, когда следующий токен этого сканера является допустимым
BigDecimal - Throws:
-
IllegalStateException- если этот сканер закрыт
nextBigDecimal
public BigDecimal nextBigDecimal()
BigDecimal. Если следующий токен соответствует регулярному выражению Десятичное число, определённому выше, то токен преобразуется в значение BigDecimal как если бы все разделители групп были удалены, а не-ASCII цифры были преобразованы в ASCII цифры с помощью Character.digit, и полученная строка передана в конструктор BigDecimal(String).
- Returns:
- сканированное значение
BigDecimalиз ввода - Throws:
-
InputMismatchException- если следующий токен не соответствует регулярному выражению Десятичное число или находится вне диапазона -
NoSuchElementException- если входные данные исчерпаны -
IllegalStateException- если этот сканер закрыт
reset
public Scanner reset()
Сброс сканера отбрасывает всю его явную информацию о состоянии, которая могла быть изменена вызовами useDelimiter(), useLocale() или useRadix().
Вызов этого метода в форме scanner.reset() ведет себя точно так же, как вызов
scanner.useDelimiter("\\p{javaWhitespace}+") .useLocale(Locale.getDefault(Locale.Category.FORMAT)) .useRadix(10);
- Возвращает:
- этот сканер
- С:
- 1.6
tokens
public Stream<String> tokens()
next(), пока метод hasNext() не вернет false. Полученный поток является последовательным и упорядоченным. Все элементы потока не равны null.
Сканирование начинается при инициировании терминальной операции потока, используя текущее состояние этого сканера. Последующие вызовы любых методов этого сканера, кроме close() и ioException(), могут вернуть неопределенные результаты или вызвать неопределенные эффекты на возвращаемом потоке. Источник возвращаемого потока Spliterator является быстропроверяемым и, по возможности, бросит исключение ConcurrentModificationException, если такие вызовы будут обнаружены во время выполнения потоковой обработки.
После завершения выполнения потоковой обработки этот сканер остается в неопределенном состоянии и не может быть повторно использован.
Если этот сканер содержит ресурс, который необходимо освободить, этот сканер должен быть закрыт, либо вызвав его метод close(), либо закрыв возвращаемый поток. Закрытие потока закроет базовый сканер. IllegalStateException выбрасывается, если сканер был закрыт при вызове этого метода или если этот сканер закрывается во время выполнения потоковой обработки.
Этот метод может блокироваться, ожидая дополнительного ввода.
- Примечание API:
- Например, следующий код создаст список токенов, разделенных запятыми, из строки:
List<String> result = new Scanner("abc,def,,ghi") .useDelimiter(",") .tokens() .collect(Collectors.toList());Полученный список будет содержать
"abc","def", пустую строку и"ghi". - Возвращает:
- последовательный поток строк токенов
- Исключения:
-
IllegalStateException- если этот сканер закрыт - С:
- 9
findAll
public Stream<MatchResult> findAll(Pattern pattern)
findWithinHorizon(pattern, 0) и затем match() последовательно, до тех пор, пока findWithinHorizon() находит соответствия. Полученный поток является последовательным и упорядоченным. Все элементы потока не равны null.
Сканирование начинается при инициировании терминальной операции потока, используя текущее состояние этого сканера. Последующие вызовы любых методов этого сканера, кроме close() и ioException(), могут вернуть неопределенные результаты или вызвать неопределенные эффекты на возвращаемом потоке. Источник возвращаемого потока Spliterator является быстропроверяемым и, по возможности, бросит исключение ConcurrentModificationException, если такие вызовы будут обнаружены во время выполнения потоковой обработки.
После завершения выполнения потоковой обработки этот сканер остается в неопределенном состоянии и не может быть повторно использован.
Если этот сканер содержит ресурс, который необходимо освободить, этот сканер должен быть закрыт, либо вызвав его метод close(), либо закрыв возвращаемый поток. IllegalStateException выбрасывается, если сканер был закрыт при вызове этого метода или если этот сканер закрывается во время выполнения потоковой обработки.
Как и методы findWithinHorizon(), этот метод может блокироваться, ожидая дополнительного ввода, и может буферизовать неограниченное количество ввода, ища соответствие.
- Примечание API:
- Например, следующий код прочитает файл и вернет список всех последовательностей символов, состоящих из семи или более прописных латинских букв:
try (Scanner sc = new Scanner(Path.of("input.txt"))) { Pattern pat = Pattern.compile("[A-Z]{7,}"); List<String> capWords = sc.findAll(pat) .map(MatchResult::group) .collect(Collectors.toList()); } - Параметры:
-
pattern- шаблон, который должен быть сопоставлен - Возвращает:
- последовательный поток результатов соответствия
- Исключения:
-
NullPointerException- если шаблон равен null -
IllegalStateException- если этот сканер закрыт - С:
- 9
findAll
public Stream<MatchResult> findAll(String patString)
scanner.findAll(Pattern.compile(patString))
- Параметры:
-
patString- строка шаблона - Возвращает:
- последовательный поток результатов соответствия
- Исключения:
-
NullPointerException- если patString равен null -
IllegalStateException- если этот сканер закрыт -
PatternSyntaxException- если синтаксис регулярного выражения некорректен - С:
- 9
- См. также:
© 1993, 2021, 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.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Scanner.html