public class StreamTokenizer extends Object
StreamTokenizer
类需要一个输入流,将其转化为“代币”,允许令牌被读取一次。解析过程是由一个表和一个可以设置为不同的状态的标志来控制的。流标记可以识别标识,数字,字符串,和各种评论风格。
从输入流中读取每个字节作为一个字符的范围'\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)
创建一个标记解析给定的字符流。
|
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 是“普通”这个标记。
|
void |
parseNumbers()
指定的号码应该由这个令牌化解析。
|
void |
pushBack()
导致下一次调用这个tokenizer的
nextToken 方法返回的
ttype 字段的当前值,而不是修改在
nval 或
sval 字段的值。
|
void |
quoteChar(int ch)
指定匹配这个字符分隔字符串常数对这个分解器。
|
void |
resetSyntax()
重置这个tokenizer的语法表,所有的文字都是“普通”。看到一个字符被普通的更多信息,
ordinaryChar 方法。
|
void |
slashSlashComments(boolean flag)
决定是否标记识别C++风格的注释。
|
void |
slashStarComments(boolean flag)
决定是否标记识别C风格的注释。
|
String |
toString()
返回当前流标记的字符串表示形式和发生的行数。
|
void |
whitespaceChars(int low, int hi)
指定范围内的所有字符C
low <= c <= high 是空格字符。
|
void |
wordChars(int low, int hi)
指定范围内的所有字符C
low <= c <= high 词成分。
|
public int ttype
nextToken
方法后,该字段包含令牌类型看。对于一个单一的字符标记,它的值是单个字符,转换为整数。对于一个引用的字符串标记,它的值是引号字符。否则,它的值可以是下列之一:
TT_WORD
表明该标记是一个词。TT_NUMBER
表明该标记是一个数。TT_EOL
表明行末已读。现场只有eolIsSignificant
方法被调用的参数true
有价值。TT_EOF
表明输入已到达流的末尾。这个字段的初始值为- 4。
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
字段的值是一个引用字符。
这个字段的初始值为空。
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
-读者对象提供的输入流。
public void resetSyntax()
ordinaryChar
方法。
ordinaryChar(int)
public void wordChars(int low, int hi)
low <= c <= high
词成分。一个字标记由一个词的成分,其次是零或更多的单词成分或数成分。
low
-低端的范围内。
hi
-高端的范围。
public void whitespaceChars(int low, int hi)
low <= c <= high
是空格字符。空格字符只服务于输入流中的分隔符。
指定范围内的字符的任何其他属性设置都清除。
low
-低端的范围内。
hi
-高端的范围。
public void ordinaryChars(int low, int hi)
low <= c <= high
是“普通”这个标记。看到一个字符被普通的更多信息,
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'
)。此外,回车字符后面紧跟一个换行符作为一个单端线标记。
如果flag
是假的,行结束字符视为白空间,只是单独的标记。
flag
-
true
表明行结束字符的分隔符;
false
表示行结束字符是空格。
nextToken()
,
ttype
,
TT_EOL
public void slashStarComments(boolean flag)
true
,该流的C风格的注释标记识别。对
/*
和
*/
相继出现之间的所有文本都被丢弃。
如果标志的说法是false
,然后C风格的注释没有特别的处理。
flag
-
true
表明识别和忽略C风格的注释。
public void slashSlashComments(boolean flag)
true
,此流tokenizer识别C++风格的注释。出现连续两个斜杠字符(
'/'
)作为一个评论,延伸到终点的开始。
如果标志的说法是false
,那么C++风格的评论没有特别的处理。
flag
-
true
表明识别和忽略C++风格的注释。
public void lowerCaseMode(boolean fl)
true
,然后在
sval
字段的值为小写,每当一个字令牌返回的
ttype
场(由这个tokenizer
nextToken
方法的价值
TT_WORD
。
如果标志的说法是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.