- 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 描述 doublenval如果当前令牌是一个数字,则此字段包含该数字的值。Stringsval如果当前令牌是一个单词标记,则该字段包含一个字符串,给出单词令牌的字符。static intTT_EOF指示流的末尾已被读取的常量。static intTT_EOL一个常量,指示行的末尾已被读取。static intTT_NUMBER指示已读取数字令牌的常量。static intTT_WORD一个表示已经读取了单词标记的常量。intttype在调用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 方法 描述 voidcommentChar(int ch)指定字符参数启动单行注释。voideolIsSignificant(boolean flag)确定行尾是否被视为令牌。intlineno()返回当前行号。voidlowerCaseMode(boolean fl)确定字标记是否自动降低。intnextToken()从此分类器的输入流中解析下一个令牌。voidordinaryChar(int ch)指定此标记器中的字符参数为“普通”。voidordinaryChars(int low, int hi)指定此分类器中low <= c <= high范围内的所有字符 c均为“普通”。voidparseNumbers()指定数字应由此分段器解析。voidpushBack()导致下一次调用此令牌化器的nextToken方法以返回ttype字段中的当前值,而不修改nval或sval字段中的值。voidquoteChar(int ch)指定此字符串的匹配对在此分段器中分隔字符串常量。voidresetSyntax()重置这个tokenizer的语法表,使所有的字符都是“普通的”。voidslashSlashComments(boolean flag)确定tokenizer是否识别C ++风格的注释。voidslashStarComments(boolean flag)确定标记器是否识别C风格的注释。StringtoString()返回当前流令牌的字符串表示形式及其发生的行号。voidwhitespaceChars(int low, int hi)指定low <= c <= high范围内的所有字符 c都是空白字符。voidwordChars(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()
返回当前行号。- 结果
- 该流标记器的当前行号。
-
-