- java.lang.Object
-
- java.io.StreamTokenizer
-
public class StreamTokenizer extends Object
StreamTokenizer
类获取输入流并将其解析为“令牌”,允许一次读取一个令牌。 解析过程由表和许多可以设置为各种状态的标志控制。 流标记器可以识别标识符,数字,引用的字符串和各种注释样式。从输入流读取的每个字节被视为
'\u0000'
到'\u00FF'
范围内的字符。 字符值用于查找字符的五个可能属性: 空格 , 字母 , 数字 , 字符串引号和注释字符 。 每个字符可以包含零个或多个这些属性。另外,一个实例有四个标志。 这些标志表明:
- 线路终结器是作为令牌返回还是作为仅仅分隔令牌的空白处理。
- 是否要识别和跳过C风格的注释。
- 是否要识别和跳过C ++风格的注释。
- 标识符的字符是否转换为小写。
典型应用程序首先构造此类的实例,设置语法表,然后在循环的每次迭代中重复循环调用
nextToken
方法,直到它返回值TT_EOF
。- 从以下版本开始:
- 1.0
- 另请参见:
-
nextToken()
,TT_EOF
-
-
构造方法摘要
构造方法 构造器 描述 StreamTokenizer(InputStream is)
已过时。从JDK 1.1版开始,标记输入流的首选方法是将其转换为字符流,例如:StreamTokenizer(Reader r)
创建一个解析给定字符流的tokenizer。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 void
commentChar(int ch)
指定字符参数开始单行注释。void
eolIsSignificant(boolean flag)
确定行的结尾是否被视为标记。int
lineno()
返回当前行号。void
lowerCaseMode(boolean fl)
确定单词标记是否自动小写。int
nextToken()
解析此tokenizer的输入流中的下一个标记。void
ordinaryChar(int ch)
指定此标记生成器中的字符参数为“普通”。void
ordinaryChars(int low, int hi)
指定low <= c <= high
范围内的所有字符 c在此tokenizer中都是“普通”。void
parseNumbers()
指定此标记生成器应解析数字。void
pushBack()
导致下一次调用此tokenizer的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
一个常量,指示已读取流的结尾。- 另请参见:
- 常数字段值
-
TT_EOL
public static final int TT_EOL
一个常量,表示已读取行尾。- 另请参见:
- 常数字段值
-
TT_NUMBER
public static final int TT_NUMBER
表示已读取数字标记的常量。- 另请参见:
- 常数字段值
-
TT_WORD
public static final int TT_WORD
表示已读取单词标记的常量。- 另请参见:
- 常数字段值
-
sval
public String sval
如果当前令牌是单词标记,则该字段包含一个字符串,给出单词标记的字符。 当前标记是带引号的字符串标记时,此字段包含字符串的主体。当
ttype
字段的值为TT_WORD
时,当前标记为单词。 当ttype
字段的值是引号字符时,当前标记是带引号的字符串标记。该字段的初始值为null。
- 另请参见:
-
quoteChar(int)
,TT_WORD
,ttype
-
-
构造方法详细信息
-
StreamTokenizer
@Deprecated public StreamTokenizer(InputStream is)
Deprecated.As of JDK version 1.1, the preferred way to tokenize an input stream is to convert it into a character stream, for example: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在此tokenizer中都是“普通”。 有关普通字符的更多信息,请参见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)
确定行的结尾是否被视为标记。 如果flag参数为true,则此标记生成器将行尾视为标记;nextToken
方法返回TT_EOL
并在读取行尾时将ttype
字段设置为此值。行是以回车字符(
'\r'
)或换行符('\n'
)结尾的字符'\n'
。 此外,紧接着换行符后面的回车字符被视为单行结束标记。如果
flag
为false,flag
行尾字符视为空格并仅用于分隔标记。- 参数
-
flag
-true
表示行尾字符是单独的标记;false
表示行尾字符是空格。 - 另请参见:
-
nextToken()
,ttype
,TT_EOL
-
slashStarComments
public void slashStarComments(boolean flag)
确定标记化程序是否识别C样式的注释。 如果flag参数为true
,则此流标记化器会识别C样式的注释。 连续出现的/*
和*/
之间的所有文本都将被丢弃。如果flag参数为
false
,则不会特别处理C样式的注释。- 参数
-
flag
-true
表示识别并忽略C风格的注释。
-
slashSlashComments
public void slashSlashComments(boolean flag)
确定tokenizer是否识别C ++风格的注释。 如果flag参数为true
,则此流标记化器会识别C ++样式的注释。 任何出现的两个连续斜杠字符('/'
)都被视为延伸到该行末尾的注释的开头。如果flag参数是
false
,则不会特别处理C ++样式的注释。- 参数
-
flag
-true
表示识别并忽略C ++风格的注释。
-
lowerCaseMode
public void lowerCaseMode(boolean fl)
确定单词标记是否自动小写。 如果标志参数为true
,然后在该值sval
每当返回一个字令牌字段被小写(该ttype
字段具有值TT_WORD
由nextToken
此标记生成器的方法。如果flag参数为
false
,则不会修改sval
字段。- 参数
-
fl
-true
表示所有单词标记都应该是小写的。 - 另请参见:
-
nextToken()
,ttype
,TT_WORD
-
nextToken
public int nextToken() throws IOException
解析此tokenizer的输入流中的下一个标记。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()
返回当前行号。- 结果
- 此流标记器的当前行号。
-
-