public class StreamTokenizer extends Object
StreamTokenizer
类接收输入流并将其解析为“令牌”,允许一次读取一个令牌。
解析过程由表和多个可以设置为各种状态的标志来控制。
流标记器可以识别标识符,数字,引用的字符串和各种注释样式。
从输入流读取的每个字节被视为'\u0000'
至'\u00FF'
范围内的'\u0000'
'\u00FF'
。 字符值用于查找字符的五个可能属性: 空格 , 字母 , 数字 , 字符串引号和注释字符 。 每个角色都可以有零个或多个这些属性。
另外,一个实例有四个标志。 这些标志表示:
一个典型的应用程序首先构造一个这个类的一个实例,设置语法表,然后反复循环在循环的每个迭代中调用nextToken
方法,直到它返回值TT_EOF
。
nextToken()
,
TT_EOF
Modifier and Type | Field and Description |
---|---|
double |
nval
如果当前令牌是一个数字,则此字段包含该数字的值。
|
String |
sval
如果当前令牌是一个单词标记,则该字段包含一个字符串,给出单词令牌的字符。
|
static int |
TT_EOF
指示流的末尾已被读取的常量。
|
static int |
TT_EOL
一个常量,指示行的末尾已被读取。
|
static int |
TT_NUMBER
指示已读取数字令牌的常量。
|
static int |
TT_WORD
一个表示已经读取了单词标记的常量。
|
int |
ttype
在调用
nextToken 方法后,此字段包含刚刚读取的令牌的类型。
|
Constructor and Description |
---|
StreamTokenizer(InputStream is)
已弃用
从JDK版本1.1开始,将输入流标记化的首选方法是将其转换为字符流,例如:
Reader r = new BufferedReader(new InputStreamReader(is)); StreamTokenizer st = new StreamTokenizer(r); |
StreamTokenizer(Reader r)
创建一个解析给定字符流的tokenizer。
|
Modifier and Type | Method and Description |
---|---|
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
low <= c <= high 此tokenizer“普通”。
|
void |
parseNumbers()
指定数字应由此分段器解析。
|
void |
pushBack()
导致下一次调用此标记器的
nextToken 方法返回
ttype 字段中的当前值,而不修改
nval 或
sval 字段中的值。
|
void |
quoteChar(int ch)
指定此字符串的匹配对在此分段器中分隔字符串常量。
|
void |
resetSyntax()
重置这个tokenizer的语法表,使所有的字符都是“普通的”。
有关一般 ordinaryChar 的更多信息,请参阅ordinaryChar 方法。
|
void |
slashSlashComments(boolean flag)
确定tokenizer是否识别C ++风格的注释。
|
void |
slashStarComments(boolean flag)
确定标记器是否识别C风格的注释。
|
String |
toString()
返回当前流标记及其发生的行号的字符串表示形式。
|
void |
whitespaceChars(int low, int hi)
指定范围
low <= c <= high 中的所有字符
c都是空白字符。
|
void |
wordChars(int low, int hi)
指定范围
low <= c <= high 中的所有字符
c都是字组成。
|
public int ttype
nextToken
方法后,此字段包含刚刚读取的令牌的类型。
对于单个字符令牌,其值是单个字符,转换为整数。
对于引用的字符串令牌,其值是引号字符。
否则,其值为以下之一:
TT_WORD
表示令牌是一个单词。 TT_NUMBER
表示令牌是一个数字。 TT_EOL
表示已经读取了行尾。 如果使用参数true
调用了eolIsSignificant
方法,则该字段只能具有此值。 TT_EOF
指示已经达到输入流的结尾。 该字段的初始值为-4。
eolIsSignificant(boolean)
,
nextToken()
,
quoteChar(int)
,
TT_EOF
,
TT_EOL
,
TT_NUMBER
,
TT_WORD
public static final int TT_EOF
public static final int TT_EOL
public static final int TT_NUMBER
public static final int TT_WORD
public String sval
ttype
字段的值为TT_WORD
时,当前令牌为单词。 ttype
字段的值为引号字符时,当前令牌是带引号的字符串令牌。
该字段的初始值为null。
quoteChar(int)
,
TT_WORD
,
ttype
@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'
被认为是空格。 '/'
是一个注释字符。 '\''
和双引号'"'
是字符串引号字符。 is
- 输入流。
BufferedReader
, InputStreamReader
, StreamTokenizer(java.io.Reader)
public StreamTokenizer(Reader r)
r
- 提供输入流的Reader对象。
public void resetSyntax()
ordinaryChar
的更多信息,请参阅ordinaryChar
方法。
ordinaryChar(int)
public void wordChars(int low, int hi)
low <= c <= high
中的所有字符c都是字组成。
单词令牌由一个单词组成,后跟零个或多个单词组成或数字组成。
low
- 范围的低端。
hi
- 高端的范围。
public void whitespaceChars(int low, int hi)
low <= c <= high
中的所有字符c都是空白字符。
白色空格字符仅用于在输入流中分隔标记。
指定范围内字符的任何其他属性设置都将被清除。
low
- 范围的低端。
hi
- 高端的范围。
public void ordinaryChars(int low, int hi)
low <= c <= high
此tokenizer“普通”。
有关一般ordinaryChar
的更多信息,请参阅ordinaryChar
方法。
low
- 范围的低端。
hi
- 高端的范围。
ordinaryChar(int)
public void ordinaryChar(int ch)
ttype
字段设置为字符值。
线路终端字符“普通”可能会干扰StreamTokenizer
对线路进行计数的能力。 lineno
方法可能不再反映在其行计数中存在这样的终止符字符。
ch
- 字符。
ttype
public void commentChar(int ch)
清除指定字符的任何其他属性设置。
ch
- 字符。
public void quoteChar(int ch)
当nextToken
方法遇到字符串常量时, ttype
字段设置为字符串分隔符, sval
字段设置为字符串的正文。
如果遇到字符串引用字符,则会识别一个字符串,由字符串引用字符(但不包括)之后的所有字符组成,直到(但不包括)相同字符串引号字符的下一个出现或行终止符,或文件结尾。 当解析字符串时,通常的转义序列如"\n"
和"\t"
被识别并转换为单个字符。
清除指定字符的任何其他属性设置。
ch
- 字符。
nextToken()
,
sval
,
ttype
public void parseNumbers()
0 1 2 3 4 5 6 7 8 9 . -
具有“数值”属性。
当解析器遇到具有双精度浮点数格式的单词令牌时,通过将ttype
字段设置为值TT_NUMBER
并将令牌的数字值放入,将令牌视为数字而不是字nval
字段。
public void eolIsSignificant(boolean flag)
nextToken
方法返回TT_EOL
,并将ttype
字段设置为此值。
一行是以回车符( '\r'
)或换行符( '\n'
)结尾的一系列'\n'
。 另外,一个换行符后跟随一个换行字符被视为一个单一的行尾标记。
如果flag
为假,则行尾字符将被视为空格,仅用于分隔标记。
flag
- true
表示行尾字符是独立的标记;
false
表示行尾字符是空格。
nextToken()
,
ttype
,
TT_EOL
public void slashStarComments(boolean flag)
true
,则该流标记器识别C风格的注释。
/*
和*/
之间的连续出现的所有文本都被丢弃。
如果flag参数是false
,那么C风格的注释不会被特别处理。
flag
-
true
表示识别和忽略C风格的评论。
public void slashSlashComments(boolean flag)
true
,则该流标记器可以识别C ++风格的注释。
任何两个连续的斜杠字符( '/'
)的出现被视为延伸到行尾的注释的开头。
如果flag参数是false
,那么C ++风格的注释不会被特别处理。
flag
-
true
表示识别和忽略C ++风格的注释。
public void lowerCaseMode(boolean fl)
true
,则在该值sval
每当返回一个字令牌字段被小写(该ttype
字段具有值TT_WORD
由nextToken
此标记生成器的方法。
如果标志参数是false
,则sval
字段不被修改。
fl
-
true
表示所有单词标记应该较低。
nextToken()
,
ttype
,
TT_WORD
public int nextToken() throws IOException
ttype
字段中返回下一个令牌的类型。
有关令牌的其他信息可能位于此标记器的nval
字段或sval
字段中。
此类的典型客户端首先设置语法表,然后坐在一个循环中调用nextToken来解析连续的令牌,直到返回TT_EOF。
ttype
字段的值。
IOException
- 如果发生I / O错误。
nval
,
sval
,
ttype
public void pushBack()
nextToken
方法返回
ttype
字段中的当前值,而不修改
nval
或
sval
字段中的值。
nextToken()
,
nval
,
sval
,
ttype
public int lineno()