Module java.base
Package java.io

Class StreamTokenizer

java.lang.Object
java.io.StreamTokenizer

public class StreamTokenizer extends Object
StreamTokenizer类接受一个输入流并将其解析为“标记”,允许逐个读取这些标记。解析过程由一个表和一些可以设置为不同状态的标志控制。流标记器可以识别标识符、数字、带引号的字符串和各种注释样式。

从输入流中读取的每个字节被视为范围在'\u0000''\u00FF'之间的字符。字符值用于查找字符的五个可能属性:空白字符字母数字字符串引号注释字符。每个字符可以具有零个或多个这些属性。

此外,一个实例有四个标志。这些标志指示:

  • 是否将行终止符作为标记返回,还是将其视为仅分隔标记的空白字符。
  • 是否识别并跳过C风格注释。
  • 是否识别并跳过C++风格注释。
  • 是否将标识符的字符转换为小写。

一个典型的应用程序首先构造此类的一个实例,设置语法表,然后在循环的每次迭代中重复调用nextToken方法,直到它返回值TT_EOF

自从:
1.0
另请参阅:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    double
    如果当前标记是一个数字,则此字段包含该数字的值。
    如果当前标记是一个单词标记,则此字段包含一个字符串,其中包含单词标记的字符。
    static final int
    表示已读取流的末尾的常量。
    static final int
    表示已读取行的末尾的常量。
    static final int
    表示已读取数字标记的常量。
    static final int
    表示已读取单词标记的常量。
    int
    在调用nextToken方法后,此字段包含刚读取的标记的类型。
  • Constructor Summary

    Constructors
    Constructor
    Description
    已弃用。
    从JDK版本1.1开始,将输入流标记化的首选方法是将其转换为字符流,例如:
        Reader r = new BufferedReader(new InputStreamReader(is));
        StreamTokenizer st = new StreamTokenizer(r);
    
    创建一个解析给定字符流的标记生成器。
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    commentChar(int ch)
    指定字符参数开始一个单行注释。
    void
    eolIsSignificant(boolean flag)
    确定是否将行尾视为标记。
    int
    lineno()
    返回当前行号。
    void
    lowerCaseMode(boolean fl)
    确定是否自动将单词标记转换为小写。
    int
    从此标记生成器的输入流中解析下一个标记。
    void
    ordinaryChar(int ch)
    指定此标记生成器中的字符参数为“普通”。
    void
    ordinaryChars(int low, int hi)
    指定范围在low <= c <= high内的所有字符为此标记生成器中的“普通”字符。
    void
    指定应由此标记生成器解析数字。
    void
    导致此标记生成器的下一次调用nextToken方法返回ttype字段中的当前值,并且不修改nvalsval字段中的值。
    void
    quoteChar(int ch)
    指定此字符在此标记生成器中匹配的字符对界定字符串常量。
    void
    重置此标记生成器的语法表,以使所有字符均为“普通”。
    void
    slashSlashComments(boolean flag)
    确定标记生成器是否识别C++风格注释。
    void
    slashStarComments(boolean flag)
    确定标记生成器是否识别C风格注释。
    返回当前流标记的字符串表示形式及其出现的行号。
    void
    whitespaceChars(int low, int hi)
    指定范围在low <= c <= high内的所有字符为空白字符。
    void
    wordChars(int low, int hi)
    指定范围在low <= c <= high内的所有字符为单词组成字符。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • ttype

      public int ttype
      在调用nextToken方法后,此字段包含刚读取的标记的类型。对于单个字符标记,其值为转换为整数的单个字符。对于带引号的字符串标记,其值为引号字符。否则,其值为以下之一:
      • TT_WORD表示标记是一个单词。
      • TT_NUMBER表示标记是一个数字。
      • TT_EOL表示已读取行的末尾。只有在调用eolIsSignificant方法并传入true参数时,该字段才能具有此值。
      • TT_EOF表示已到达输入流的末尾。

      此字段的初始值为-4。

      另请参阅:
    • 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。

      另请参阅:
    • nval

      public double nval
      如果当前标记是一个数字,则此字段包含该数字的值。当ttype字段的值为TT_NUMBER时,当前标记是一个数字。

      此字段的初始值为0.0。

      另请参阅:
  • Constructor Details

    • 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 - 一个输入流。
      另请参阅:
    • StreamTokenizer

      public StreamTokenizer(Reader r)
      创建一个解析给定字符流的标记生成器。
      参数:
      r - 提供输入流的Reader对象。
      自从:
      1.1
  • Method Details

    • resetSyntax

      public void resetSyntax()
      重置此标记生成器的语法表,以使所有字符均为“普通”。有关字符为普通字符的更多信息,请参阅ordinaryChar方法。
      另请参阅:
    • wordChars

      public void wordChars(int low, int hi)
      指定范围在low <= c <= high内的所有字符为单词组成字符。单词标记由单词组成字符后跟零个或多个单词组成字符或数字组成字符组成。
      参数:
      low - 范围的低端。
      hi - 范围的高端。
    • whitespaceChars

      public void whitespaceChars(int low, int hi)
      指定范围在low <= c <= high内的所有字符为空白字符。空白字符仅用于分隔输入流中的标记。

      指定范围内字符的任何其他属性设置都将被清除。

      参数:
      low - 范围的低端。
      hi - 范围的高端。
    • ordinaryChars

      public void ordinaryChars(int low, int hi)
      指定范围在low <= c <= high内的所有字符在此标记生成器中为“普通”。有关字符为普通字符的更多信息,请参阅ordinaryChar方法。
      参数:
      low - 范围的低端。
      hi - 范围的高端。
      参见:
    • ordinaryChar

      public void ordinaryChar(int ch)
      指定字符参数在此标记生成器中为“普通”字符。它会移除字符作为注释字符、单词组件、字符串定界符、空白或数字字符的任何特殊含义。当解析器遇到这样的字符时,解析器将其视为单字符标记,并将ttype字段设置为字符值。

      将行终止符字符“普通化”可能会影响StreamTokenizer计算行数的能力。lineno方法可能不再反映其行计数中存在这种终止符字符。

      参数:
      ch - 字符。
      参见:
    • commentChar

      public void commentChar(int ch)
      指定字符参数开始单行注释。从注释字符到行尾的所有字符都会被此流标记生成器忽略。

      指定字符的任何其他属性设置都将被清除。

      参数:
      ch - 字符。
    • quoteChar

      public void quoteChar(int ch)
      指定此字符的匹配对用于定界此标记生成器中的字符串常量。

      nextToken方法遇到字符串常量时,ttype字段设置为字符串定界符,sval字段设置为字符串的内容。

      如果遇到字符串引号字符,则会识别一个字符串,由字符串引号字符之后(但不包括)的所有字符组成,直到下一个出现该相同字符串引号字符、行终止符或文件结束为止。在解析字符串时,通常的转义序列如"\n""\t"会被识别并转换为单个字符。

      指定字符的任何其他属性设置都将被清除。

      参数:
      ch - 字符。
      参见:
    • 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')结尾的字符序列。此外,紧随回车符字符后面的换行符字符被视为单个行终止符。

      如果flag为false,则行尾字符被视为空白字符,仅用于分隔标记。

      参数:
      flag - true表示行尾字符是单独的标记;false表示行尾字符是空白字符。
      参见:
    • slashStarComments

      public void slashStarComments(boolean flag)
      确定标记生成器是否识别C风格注释。如果标志参数为true,则此流标记生成器将识别C风格注释。在/**/之间的所有文本都将被丢弃。

      如果标志参数为false,则C风格注释不会被特殊处理。

      参数:
      flag - true表示识别并忽略C风格注释。
    • slashSlashComments

      public void slashSlashComments(boolean flag)
      确定标记生成器是否识别C++风格注释。如果标志参数为true,则此流标记生成器将识别C++风格注释。任何两个连续斜杠字符('/')的出现都被视为从开始的注释延伸到行尾。

      如果标志参数为false,则C++风格注释不会被特殊处理。

      参数:
      flag - true表示识别并忽略C++风格注释。
    • lowerCaseMode

      public void lowerCaseMode(boolean fl)
      确定是否自动将单词标记转换为小写。如果标志参数为true,则每当返回单词标记时,sval字段中的值将被转换为小写(通过此标记生成器的nextToken方法将ttype字段的值为TT_WORD)。

      如果标志参数为false,则sval字段不会被修改。

      参数:
      fl - true表示所有单词标记应转换为小写。
      参见:
    • nextToken

      public int nextToken() throws IOException
      从此标记生成器的输入流中解析下一个标记。下一个标记的类型将在ttype字段中返回。有关标记的其他信息可能在此标记生成器的nval字段或sval字段中。

      此类的典型客户端首先设置语法表,然后循环调用nextToken来解析连续的标记,直到返回TT_EOF。

      返回:
      ttype字段的值。
      抛出:
      IOException - 如果发生I/O错误。
      参见:
    • pushBack

      public void pushBack()
      导致此标记生成器的nextToken方法的下一次调用返回ttype字段中的当前值,并且不修改nvalsval字段中的值。
      参见:
    • lineno

      public int lineno()
      返回当前行号。
      返回:
      此流标记生成器的当前行号。
    • toString

      public String toString()
      返回当前流标记的字符串表示形式及其出现的行号。

      返回的确切字符串未指定,尽管以下示例可被视为典型:

               Token['a'], line 10
       
      覆盖:
      toString 在类 Object
      返回:
      标记的字符串表示形式
      参见: