模块  java.base
软件包  java.io

Class StreamTokenizer


  • public class StreamTokenizer
    extends Object
    StreamTokenizer类获取输入流并将其解析为“令牌”,允许一次读取一个令牌。 解析过程由表和许多可以设置为各种状态的标志控制。 流标记器可以识别标识符,数字,引用的字符串和各种注释样式。

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

    另外,一个实例有四个标志。 这些标志表明:

    • 线路终结器是作为令牌返回还是作为仅仅分隔令牌的空白处理。
    • 是否要识别和跳过C风格的注释。
    • 是否要识别和跳过C ++风格的注释。
    • 标识符的字符是否转换为小写。

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

    从以下版本开始:
    1.0
    另请参见:
    nextToken()TT_EOF
    • 字段汇总

      字段  
      变量和类型 字段 描述
      double nval
      如果当前令牌是数字,则此字段包含该数字的值。
      String sval
      如果当前令牌是单词标记,则该字段包含一个字符串,给出单词标记的字符。
      static int TT_EOF
      一个常量,指示已读取流的结尾。
      static int TT_EOL
      一个常量,表示已读取行尾。
      static int TT_NUMBER
      表示已读取数字标记的常量。
      static int TT_WORD
      表示已读取单词标记的常量。
      int ttype
      调用 nextToken方法后,此字段包含刚刚读取的令牌类型。
    • 构造方法摘要

      构造方法  
      构造器 描述
      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字段中的当前值,而不是修改 nvalsval字段中的值。
      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_EOFTT_EOLTT_NUMBERTT_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_WORDttype
      • nval

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

        该字段的初始值为0.0。

        另请参见:
        TT_NUMBERttype
    • 构造方法详细信息

      • 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 - 输入流。
        另请参见:
        BufferedReaderInputStreamReaderStreamTokenizer(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()svalttype
      • parseNumbers

        public void parseNumbers()
        指定此标记生成器应解析数字。 修改此标记生成器的语法表,以便十二个字符中的每一个:
              0 1 2 3 4 5 6 7 8 9 . -
         

        具有“数字”属性。

        当解析器遇到具有双精度浮点数格式的单词标记时,它将标记视为数字而不是单词,方法是将ttype字段设置为值TT_NUMBER并将标记的数值放入nval字段。

        另请参见:
        nvalTT_NUMBERttype
      • eolIsSignificant

        public void eolIsSignificant​(boolean flag)
        确定行的结尾是否被视为标记。 如果flag参数为true,则此标记生成器将行尾视为标记; nextToken方法返回TT_EOL并在读取行尾时将ttype字段设置为此值。

        行是以回车字符( '\r' )或换行符( '\n' )结尾的字符'\n' 此外,紧接着换行符后面的回车字符被视为单行结束标记。

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

        参数
        flag - true表示行尾字符是单独的标记; false表示行尾字符是空格。
        另请参见:
        nextToken()ttypeTT_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_WORDnextToken此标记生成器的方法。

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

        参数
        fl - true表示所有单词标记都应该是小写的。
        另请参见:
        nextToken()ttypeTT_WORD
      • nextToken

        public int nextToken()
                      throws IOException
        解析此tokenizer的输入流中的下一个标记。 ttype字段中返回下一个标记的类型。 有关令牌的其他信息可能位于nval字段或此令牌化程序的sval字段中。

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

        结果
        ttype字段的值。
        异常
        IOException - 如果发生I / O错误。
        另请参见:
        nvalsvalttype
      • pushBack

        public void pushBack()
        导致下一次调用此tokenizer的 nextToken方法返回 ttype字段中的当前值,而不是修改 nvalsval字段中的值。
        另请参见:
        nextToken()nvalsvalttype
      • lineno

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

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

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

        Token['a'], line 10
        重写:
        toString课程 Object
        结果
        令牌的字符串表示形式
        另请参见:
        nvalsvalttype