Module  java.base
软件包  java.io

Class 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字段中的当前值,而不修改 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
        指示流的末尾已被读取的常量。
        另请参见:
        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_WORDttype
      • nval

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

        该字段的初始值为0.0。

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

      • 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 - 输入流。
        另请参见:
        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均为“普通”。 有关一般字符的更多信息,请参阅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)
        确定行尾是否被视为令牌。 如果标志参数为true,则该标记器将行尾作为令牌处理; 当读取行结尾时, nextToken方法返回TT_EOL ,并将ttype字段设置为此值。

        行是以回车符( '\r' )或换行字符( '\n' )结尾的字符'\n' 另外,一个换行符后跟随一个换行字符被视为一个单一的行尾标记。

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

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

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

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

        public int nextToken​()
                      throws IOException
        从此分类器的输入流中解析下一个令牌。 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
        重写:
        toStringObject
        结果
        令牌的字符串表示形式
        另请参见:
        nvalsvalttype