Класс StreamTokenizer
- java.lang.Object
-
- java.io.StreamTokenizer
public class StreamTokenizer extends Object
Класс StreamTokenizer принимает входной поток и разбирает его на «токены», позволяя считывать токены по одному. Процесс разбора контролируется таблицей и рядом флагов, которые можно устанавливать в различные состояния. Токенизатор потока может распознавать идентификаторы, числа, строковые константы в кавычках и различные стили комментариев.
Каждый байт, считанный из входного потока, рассматривается как символ в диапазоне '\u0000' по '\u00FF'. Значение символа используется для поиска пяти возможных атрибутов символа: пробел, буква, цифра, кавычка и символ комментария. Каждый символ может иметь ноль или более из этих атрибутов.
Кроме того, у экземпляра есть четыре флага. Эти флаги указывают:
- Являются ли разделители строк токенами или рассматриваются как пробелы, просто разделяющие токены.
- Распознавать ли комментарии в стиле C и пропускать их.
- Распознавать ли комментарии в стиле C++ и пропускать их.
- Преобразовывать ли символы идентификаторов в нижний регистр.
Типичное приложение сначала создает экземпляр этого класса, настраивает таблицы синтаксиса, а затем многократно выполняет цикл, вызывая метод nextToken в каждой итерации цикла, пока он не вернёт значение TT_EOF.
- С:
- 1.0
- См. также:
-
nextToken(),TT_EOF
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
double | nval | Если текущий токен является числом, это поле содержит значение этого числа. |
String | sval | Если текущий токен является токеном слова, это поле содержит строку, содержащую символы токена слова. |
static int | TT_EOF | Константа, указывающая, что конец потока был прочитан. |
static int | TT_EOL | Константа, указывающая, что конец строки был прочитан. |
static int | TT_NUMBER | Константа, указывающая, что токен числа был прочитан. |
static int | TT_WORD | Константа, указывающая, что токен слова был прочитан. |
int | ttype | После вызова метода |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
StreamTokenizer(InputStream is) | Устарело. Начиная с версии JDK 1.1, предпочтительный способ токенизации входного потока заключается в преобразовании его в поток символов, например: |
StreamTokenizer(Reader r) | Создать токенизатор, который разбирает заданный поток символов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void | commentChar(int ch) | Указано, что символ-аргумент начинает однострочный комментарий. |
void | eolIsSignificant(boolean flag) | Определяет, обрабатываются ли концы строк как токены. |
int | lineno() | Возвращает текущий номер строки. |
void | lowerCaseMode(boolean fl) | Определяет, преобразуются ли токены слов в нижний регистр автоматически. |
int | nextToken() | Разбирает следующий токен из входного потока этого токенизатора. |
void | ordinaryChar(int ch) | Указывает, что символ-аргумент является «обычным» в этом токенизаторе. |
void | ordinaryChars(int low,
int hi) | Указывает, что все символы c в диапазоне |
void | parseNumbers() | Указывает, что числа должны разбираться этим токенизатором. |
void | pushBack() | Принуждает следующий вызов метода |
void | quoteChar(int ch) | Указывает, что парные символы задают строковые константы в этом токенизаторе. |
void | resetSyntax() | Сбрасывает таблицу синтаксиса этого токенизатора, чтобы все символы были «обычными». |
void | slashSlashComments(boolean flag) | Определяет, распознает ли токенизатор комментарии в стиле C++. |
void | slashStarComments(boolean flag) | Определяет, распознает ли токенизатор комментарии в стиле C. |
String | toString() | Возвращает строковое представление текущего токена потока и номер строки, на котором он встречается. |
void | whitespaceChars(int low,
int hi) | Указывает, что все символы c в диапазоне |
void | wordChars(int low,
int hi) | Указывает, что все символы c в диапазоне |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Поля
ttype
public int ttype
После вызова метода nextToken, это поле содержит тип только что прочитанного токена. Для токена одного символа его значением является сам символ, преобразованный в целое число. Для токена строковой константы его значением является символ кавычки. В противном случае его значение является одним из следующих:
-
TT_WORDуказывает, что токен является словом. -
TT_NUMBERуказывает, что токен является числом. -
TT_EOLуказывает, что конец строки был прочитан. Это значение поле может иметь только в том случае, если методeolIsSignificantбыл вызван со значением аргументаtrue. -
TT_EOFуказывает, что достигнут конец потока ввода.
Начальное значение этого поля равно -4.
- См. также:
-
eolIsSignificant(boolean),nextToken(),quoteChar(int),TT_EOF,TT_EOL,TT_NUMBER,TT_WORD
TT_EOF
public static final int TT_EOF
Константа, указывающая на то, что конец потока был прочитан.
- См. также:
- Значения константных полей
TT_EOL
public static final int TT_EOL
Константа, указывающая на то, что конец строки был прочитан.
- См. также:
- Значения константных полей
TT_NUMBER
public static final int TT_NUMBER
Константа, указывающая на то, что токен числа был прочитан.
- См. также:
- Значения константных полей
TT_WORD
public static final int TT_WORD
Константа, указывающая на то, что токен слова был прочитан.
- См. также:
- Значения константных полей
sval
public String sval
Если текущий токен является токеном слова, это поле содержит строку, содержащую символы токена слова. Когда текущий токен является токеном строковой константы, это поле содержит тело строки.
Текущий токен является токеном слова, когда значение поля ttype равно TT_WORD. Текущий токен является токеном строковой константы, когда значение поля ttype является символом кавычки.
Начальное значение этого поля равно null.
- См. также:
-
quoteChar(int),TT_WORD,ttype
nval
public double nval
Если текущий токен является числом, это поле содержит значение этого числа. Текущий токен является числом, когда значение поля ttype равно TT_NUMBER.
Начальное значение этого поля равно 0.0.
Конструкторы
StreamTokenizer
@Deprecated public StreamTokenizer(InputStream is)
Reader r = new BufferedReader(new InputStreamReader(is)); StreamTokenizer st = new StreamTokenizer(r);
Создает токенизатор потока, который анализирует указанный поток ввода. Токенизатор потока инициализируется в следующем состоянии по умолчанию:
- Все байтовые значения
'A'по'Z','a'по'z', и'\u00A0'по'\u00FF'считаются буквенными. - Все байтовые значения
'\u0000'по'\u0020'считаются пробелами. -
'/'является символом комментария. - Одинарная кавычка
'\''и двойная кавычка'"'являются символами кавычек строк. - Числа анализируются.
- Концы строк обрабатываются как пробелы, а не как отдельные токены.
- Комментарии в стиле C и C++ не распознаются.
- Параметры:
-
is- поток ввода. - См. также:
-
BufferedReader,InputStreamReader,StreamTokenizer(java.io.Reader)
StreamTokenizer
public StreamTokenizer(Reader r)
Создаёт токенизатор, который анализирует заданный поток символов.
- Параметры:
-
r- объект Reader, предоставляющий поток ввода. - С:
- 1.1
Методы
resetSyntax
public void resetSyntax()
Сбрасывает таблицу синтаксиса этого токенизатора, чтобы все символы были «обычными». Подробнее об обычном символе см. метод ordinaryChar.
- См. также:
ordinaryChar(int)
wordChars
public void wordChars(int low,
int hi) Указывает, что все символы c в диапазоне low <= c <= high являются составляющими слова. Токен слова состоит из составляющей слова, за которой следуют ноль или более составляющих слова или составляющих числа.
- Параметры:
-
low- нижняя граница диапазона. -
hi- верхняя граница диапазона.
whitespaceChars
public void whitespaceChars(int low,
int hi) Указывает, что все символы c в диапазоне low <= c <= high являются символами пробела. Символы пробела служат только для разделения токенов в потоке ввода.
Все другие параметры атрибутов для символов в указанном диапазоне сбрасываются.
- Параметры:
-
low- нижняя граница диапазона. -
hi- верхняя граница диапазона.
ordinaryChars
public void ordinaryChars(int low,
int hi) Указывает, что все символы c в диапазоне low <= c <= high являются «обычными» в этом токенизаторе. Подробнее об обычном символе см. метод ordinaryChar.
- Параметры:
-
low- нижняя граница диапазона. -
hi- верхняя граница диапазона. - См. также:
ordinaryChar(int)
ordinaryChar
public void ordinaryChar(int ch)
Указывает, что аргумент-символ является «обычным» в этом токенизаторе. Он удаляет любое специальное значение символа в качестве символа комментария, составляющей слова, разделителя строк, пробела или символа числа. Когда анализатор встречает такой символ, он обрабатывает его как токен из одного символа и устанавливает поле ttype в значение символа.
Делание символа разделителя строк «обычным» может помешать способности StreamTokenizer подсчитывать строки. Метод lineno может больше не отражать наличие таких символов разделителя строк в своем подсчёте строк.
- Параметры:
-
ch- символ. - См. также:
ttype
commentChar
public void commentChar(int ch)
Указывает, что аргумент-символ начинает однострочный комментарий. Все символы от символа комментария до конца строки игнорируются этим токенизатором потока.
Все другие параметры атрибутов для указанного символа сбрасываются.
- Параметры:
-
ch- символ.
quoteChar
public void quoteChar(int ch)
Указывает, что парные символы этого символа ограничивают строковые константы в этом токенизаторе.
Когда метод nextToken встречает строковую константу, поле ttype устанавливается в разделитель строки, а поле sval устанавливается в тело строки.
Если встречается символ кавычки строки, то распознаётся строка, состоящая из всех символов после (но не включая) символа кавычки строки до (но не включая) следующего вхождения этого же символа кавычки строки или разделителя строк или конца файла. Обычные последовательности escape, такие как "\n" и "\t", распознаются и преобразуются в отдельные символы при разборе строки.
Все другие параметры атрибутов для указанного символа сбрасываются.
- Параметры:
-
ch- символ. - См. также:
-
nextToken(),sval,ttype
parseNumbers
public void parseNumbers()
Указывает, что числа должны анализироваться этим токенизатором. Таблица синтаксиса этого токенизатора модифицируется таким образом, что каждый из двенадцати символов:
0 1 2 3 4 5 6 7 8 9 . -
имеет атрибут «числовой».
Когда анализатор встречает токен слова, который имеет формат числа двойной точности с плавающей запятой, он обрабатывает токен как число, а не слово, установив поле ttype в значение TT_NUMBER и поместив числовое значение токена в поле nval.
eolIsSignificant
public void eolIsSignificant(boolean flag)
Определяет, обрабатываются ли концы строк как токены. Если флаг-аргумент равен true, этот токенизатор обрабатывает концы строк как токены; метод nextToken возвращает TT_EOL и также устанавливает поле ttype в это значение при чтении конца строки.
Строка — это последовательность символов, заканчивающаяся либо символом возврата каретки ('\r'), либо символом новой строки ('\n'). Кроме того, символ возврата каретки, непосредственно за которым следует символ новой строки, обрабатывается как один токен конца строки.
Если flag равно false, символы конца строки обрабатываются как пробелы и служат только для разделения токенов.
- Параметры:
-
flag-trueуказывает, что символы конца строки являются отдельными токенами;falseуказывает, что символы конца строки являются пробелами. - См. также:
-
nextToken(),ttype,TT_EOL
slashStarComments
public void slashStarComments(boolean flag)
Определяет, распознаёт ли токенизатор комментарии в стиле C. Если флаг-аргумент равен true, этот токенизатор распознаёт комментарии в стиле C. Весь текст между последовательными вхождениями /* и */ отбрасывается.
Если флаг-аргумент равен false, комментарии в стиле C не обрабатываются специально.
- Параметры:
-
flag-trueуказывает распознать и пропустить комментарии в стиле C.
slashSlashComments
public void slashSlashComments(boolean flag)
Определяет, распознаёт ли токенизатор комментарии в стиле C++. Если флаг-аргумент равен true, этот токенизатор распознаёт комментарии в стиле C++. Любое вхождение двух последовательных символов слэша ('/') обрабатывается как начало комментария, который распространяется до конца строки.
Если флаг-аргумент равен false, комментарии в стиле C++ не обрабатываются специально.
- Параметры:
-
flag-trueуказывает распознать и пропустить комментарии в стиле C++.
lowerCaseMode
public void lowerCaseMode(boolean fl)
Определяет, преобразуются ли токены слова в нижний регистр автоматически. Если флаг-аргумент равен true, значение в поле sval преобразуется в нижний регистр всякий раз, когда возвращается токен слова (поле ttype имеет значение TT_WORD методом nextToken этого токенизатора).
Если флаг-аргумент равен false, поле sval не изменяется.
- Параметры:
-
fl-trueуказывает, что все токены слова должны быть в нижнем регистре. - См. также:
-
nextToken(),ttype,TT_WORD
nextToken
public int nextToken()
throws IOException Анализирует следующий токен из потока ввода этого токенизатора. Тип следующего токена возвращается в поле ttype . Дополнительная информация о токене может находиться в поле nval или поле sval этого токенизатора.
Типичные клиенты этого класса сначала настраивают таблицы синтаксиса, а затем работают в цикле, вызывая nextToken для разбора последовательных токенов до тех пор, пока не будет возвращено TT_EOF.
- Возвращает:
- значение поля
ttype. - Исключение:
-
IOException- если произошла ошибка ввода-вывода. - См. также:
-
nval,sval,ttype
pushBack
public void pushBack()
Принуждает следующий вызов метода nextToken этого токенизатора вернуть текущее значение в поле ttype, и не изменять значение в полях nval или sval.
- См. также:
-
nextToken(),nval,sval,ttype
lineno
public int lineno()
Возвращает текущий номер строки.
- Возвращает:
- текущий номер строки этого токенизатора потока.
toString
public String toString()
Возвращает строковое представление текущего токена потока и номера строки, на котором он находится.
Точное возвращаемое значение строки не определено, хотя следующий пример можно считать типичным:
Token['a'], line 10
© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/StreamTokenizer.html