java.io

接口
异常
错误
java.lang.Object
  继承者 java.io.StreamTokenizer

public class StreamTokenizer
     
extends Object

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

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

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

  • 行结束符是作为标记返回,还是被视为仅用于分隔标记的空白。
  • 是标识还是跳过 C 样式注释。
  • 是标识还是跳过 C++ 样式注释。
  • 是否将标识符的字符转换为小写字母。

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

从以下版本开始:
JDK1.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 开始,标记输入流的首选方法是将其转换为一个字符流,例如:
   Reader r = new BufferedReader(new InputStreamReader(is));
   StreamTokenizer st = new StreamTokenizer(r);
 
StreamTokenizer(Reader r)
          创建解析给定字符流的标记生成器。
 
方法摘要
 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()
          重置此标记生成器的语法表,使所有字符都成为“普通”字符。
 void slashSlashComments(boolean flag)
          确定标记生成器是否识别 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 都是文字成分。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

字段详细信息

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

nval

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

此字段的初始值为 0.0。

另请参见:
TT_NUMBER, 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)
创建解析给定字符流的标记生成器。

参数:
r - 提供输入流的 Reader 对象。
从以下版本开始:
JDK1.1
方法详细信息

resetSyntax

public void resetSyntax()
重置此标记生成器的语法表,使所有字符都成为“普通”字符。有关普通字符的更多信息,请参阅 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 字段。

另请参见:
nval, TT_NUMBER, ttype

eolIsSignificant

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

一行是一个字符序列,以回车符 ('\r') 或者以新行符 ('\n') 结尾。另外,回车符后面紧跟新行符被视为一个单行末尾标记。

如果此 flag 为 false,行末尾字符被视为空白并仅用作分隔标记。

参数:
flag - 为 true 指示行末尾字符为分隔标记;为 false 指示行末尾字符为空白。
另请参见:
nextToken(), ttype, TT_EOL

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,则在此标记生成器的 nextToken 方法返回文字标记时( ttype 字段具有值 TT_WORD), sval 字段中的值为小写字母。

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

参数:
fl - 为 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()
导致对此标记生成器的 nextToken 方法的下一个调用返回 ttype 字段中的当前值,而不修改 nvalsval 字段中的值。

另请参见:
nextToken(), nval, sval, ttype

lineno

public int lineno()
返回当前行号。

返回:
此流标记生成器的当前行号。

toString

public String toString()
返回当前流标记和在其上发生的行号的字符串表示形式。

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

Token['a'], line 10

覆盖:
Object 中的 toString
返回:
此标记的字符串表示形式
另请参见:
nval, sval, ttype