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