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()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.