public class StreamTokenizer
extends Object
java.lang.Object | |
↳ | java.io.StreamTokenizer |
StreamTokenizer
类获取输入流并将其解析为“标记”,从而允许一次读取一个标记。 解析过程由一个表格和一些可以设置为各种状态的标志控制。 流标记器可以识别标识符,数字,带引号的字符串和各种评论样式。
从输入流中读取的每个字节都被认为是'\u0000'
到'\u00FF'
一个字符。 字符值用于查找字符的五种可能属性: 空格 , 字母 , 数字 , 字符串引号和注释字符 。 每个字符可以有零个或多个这些属性。
另外,一个实例有四个标志。 这些标志表明:
典型的应用程序首先构造这个类的实例,设置语法表,然后在循环的每次迭代中重复循环调用 nextToken
方法,直到它返回值 TT_EOF
。
也可以看看:
Constants |
|
---|---|
int |
TT_EOF 一个常数,表示流的结尾已被读取。 |
int |
TT_EOL 指示行已经被读取的常量。 |
int |
TT_NUMBER 表示已读取数字令牌的常量。 |
int |
TT_WORD 表示已读取单词标记的常量。 |
Fields |
|
---|---|
public double |
nval 如果当前令牌是一个数字,则该字段包含该数字的值。 |
public String |
sval 如果当前令牌是一个单词令牌,则该字段包含一个字符串,用于给出单词令牌的字符。 |
public int |
ttype 在调用 |
Public constructors |
|
---|---|
StreamTokenizer(InputStream is) 此构造函数在API级别1中已弃用。从JDK版本1.1开始,标记输入流的首选方法是将其转换为字符流,例如: Reader r = new BufferedReader(new InputStreamReader(is)); StreamTokenizer st = new StreamTokenizer(r); |
|
StreamTokenizer(Reader r) 创建一个分析给定字符流的标记器。 |
Public methods |
|
---|---|
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) 指定在此标记器中,范围 |
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) 指定范围 |
void |
wordChars(int low, int hi) 指定范围 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
double nval
如果当前令牌是一个数字,则该字段包含该数字的值。 当ttype
字段的值为TT_NUMBER
时,当前令牌是一个数字。
该字段的初始值是0.0。
String sval
如果当前令牌是一个单词令牌,则该字段包含一个字符串,用于给出单词令牌的字符。 当前标记是带引号的字符串标记时,此字段包含字符串的正文。
当ttype
字段的值为TT_WORD
时,当前令牌是一个字。 当ttype
字段的值是引号字符时,当前令牌是带引号的字符串标记。
该字段的初始值为空。
也可以看看:
int ttype
在调用nextToken
方法之后,此字段包含刚才读取的令牌的类型。 对于单个字符标记,其值是单个字符,转换为整数。 对于带引号的字符串标记,其值是引号字符。 否则,其值是以下值之一:
TT_WORD
indicates that the token is a word. TT_NUMBER
indicates that the token is a number. TT_EOL
indicates that the end of line has been read. The field can only have this value if the eolIsSignificant
method has been called with the argument true
. TT_EOF
indicates that the end of the input stream has been reached. 该字段的初始值是-4。
StreamTokenizer (InputStream is)
此构造函数在API级别1中已弃用。
从JDK 1.1版开始,标记输入流的首选方法是将其转换为字符流,例如:
Reader r = new BufferedReader(new InputStreamReader(is)); StreamTokenizer st = new StreamTokenizer(r);
创建解析指定输入流的流标记器。 流标记器被初始化为以下默认状态:
'A'
through 'Z'
, 'a'
through 'z'
, and '\u00A0'
through '\u00FF'
are considered to be alphabetic. '\u0000'
through '\u0020'
are considered to be white space. '/'
is a comment character. '\''
and double quote '"'
are string quote characters. Parameters | |
---|---|
is |
InputStream : an input stream. |
StreamTokenizer (Reader r)
创建一个分析给定字符流的标记器。
Parameters | |
---|---|
r |
Reader : a Reader object providing the input stream. |
void commentChar (int ch)
指定字符参数开始单行注释。 此流标记器将忽略注释字符到行尾的所有字符。
清除指定字符的任何其他属性设置。
Parameters | |
---|---|
ch |
int : the character. |
void eolIsSignificant (boolean flag)
确定行结束是否被视为记号。 如果flag参数为true,则此标记器将行尾作为标记; nextToken
方法返回TT_EOL
并在读取行尾时将ttype
字段设置为此值。
一行是以回车符( '\r'
)或换行符( '\n'
)结尾的'\n'
字符。 另外,紧跟一个换行符后面的回车符被视为一个单行结束符。
如果 flag
为false,则行尾字符将被视为空白并仅用于分隔令牌。
Parameters | |
---|---|
flag |
boolean : true indicates that end-of-line characters are separate tokens; false indicates that end-of-line characters are white space. |
也可以看看:
int lineno ()
返回当前行号。
Returns | |
---|---|
int |
the current line number of this stream tokenizer. |
void lowerCaseMode (boolean fl)
确定是否自动缩小字词标记。 如果标志参数是true
,然后在该值sval
每当返回一个字令牌字段被小写(该ttype
字段具有值TT_WORD
由nextToken
此标记生成器的方法。
如果标志参数是 false
,那么 sval
字段不会被修改。
Parameters | |
---|---|
fl |
boolean : true indicates that all word tokens should be lowercased. |
也可以看看:
int nextToken ()
解析来自该标记器输入流的下一个标记。 下一个标记的类型将返回到ttype
字段中。 有关令牌的其他信息可能位于此标记器的nval
字段或sval
字段中。
此类的典型客户端首先设置语法表,然后坐在循环中调用nextToken来解析连续的标记,直到返回TT_EOF。
Returns | |
---|---|
int |
the value of the ttype field. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void ordinaryChar (int ch)
指定该标记器中的字符参数为“普通”。 它消除了字符作为注释字符,单词组件,字符串分隔符,空格或数字字符具有的任何特殊意义。 当解析器遇到这样的字符时,解析器将其视为单字符标记并将字段值设置为ttype
。
制作行结束符“普通”可能会干扰StreamTokenizer
对行数进行计数的能力。 lineno
方法可能不再反映其行计数中存在此类终止符字符。
Parameters | |
---|---|
ch |
int : the character. |
也可以看看:
void ordinaryChars (int low, int hi)
指定在此标记器中,范围low <= c <= high
中的所有字符c都是“普通”。 有关普通字符的更多信息,请参阅ordinaryChar
方法。
Parameters | |
---|---|
low |
int : the low end of the range. |
hi |
int : the high end of the range. |
也可以看看:
void parseNumbers ()
指定该标记器应解析数字。 该标记器的语法表被修改,以便每个十二个字符:
0 1 2 3 4 5 6 7 8 9 . -
具有“数字”属性。
当解析器遇到具有双精度浮点数字格式的单词标记时,它会将该标记视为数字而不是单词,方法是将 ttype
字段设置为值 TT_NUMBER
,并将该标记的数字值放入 nval
字段。
void pushBack ()
导致对该标记器的 nextToken
方法的下一次调用返回 ttype
字段中的当前值,而不是修改 nval
或 sval
字段中的值。
也可以看看:
void quoteChar (int ch)
指定在此标记器中匹配此字符对的分隔符字符串常量。
当 nextToken
方法遇到字符串常量时, ttype
字段被设置为字符串分隔符,而 sval
字段被设置为字符串的主体。
如果遇到字符串引号字符,则会识别一个字符串,其中包含字符串引号字符后的所有字符,直到(但不包括)该字符串引号字符的下一次出现或字符串终止符,或文件结尾。 通常的转义序列(如"\n"
和"\t"
被识别并在字符串解析时转换为单个字符。
清除指定字符的任何其他属性设置。
Parameters | |
---|---|
ch |
int : the character. |
也可以看看:
void resetSyntax ()
重置此标记器的语法表,以便所有字符都是“普通”。 有关普通字符的更多信息,请参阅ordinaryChar
方法。
也可以看看:
void slashSlashComments (boolean flag)
确定标记器是否识别C ++样式的注释。 如果flag参数是true
,则此流标记器可识别C ++样式的注释。 任何出现两个连续的斜线字符( '/'
)都被视为延伸到行尾的注释的开始。
如果flag参数是 false
,那么C ++样式的注释不会被专门处理。
Parameters | |
---|---|
flag |
boolean : true indicates to recognize and ignore C++-style comments. |
void slashStarComments (boolean flag)
确定标记器是否识别C样式注释。 如果标志参数为true
,则此流标记器可识别C风格的注释。 连续出现/*
和*/
之间的所有文本都将被丢弃。
如果标志参数是 false
,那么C样式注释不会被专门处理。
Parameters | |
---|---|
flag |
boolean : true indicates to recognize and ignore C-style comments. |
String toString ()
返回当前流令牌的字符串表示形式以及它发生的行号。
返回的确切字符串未指定,但以下示例可以被认为是典型的:
Token['a'], line 10
Returns | |
---|---|
String |
a string representation of the token |
void whitespaceChars (int low, int hi)
指定范围low <= c <= high
中的所有字符c都是空格字符。 空白字符仅用于在输入流中分离令牌。
清除指定范围内字符的任何其他属性设置。
Parameters | |
---|---|
low |
int : the low end of the range. |
hi |
int : the high end of the range. |
void wordChars (int low, int hi)
指定范围low <= c <= high
中的所有字符c都是单词组成部分。 一个单词标记由一个词组成,后面跟零个或多个单词组成或数字组成。
Parameters | |
---|---|
low |
int : the low end of the range. |
hi |
int : the high end of the range. |