java.lang.Object java.io.StreamTokenizer
public class StreamTokenizer
StreamTokenizer
类获取输入流并将其解析为“标记”,允许一次读取一个标记。解析过程由一个表和许多可以设置为各种状态的标志控制。该流的标记生成器可以识别标识符、数字、引用的字符串和各种注释样式。
从输入流读取的每个字节都被视为一个字符,范围在 '\u0000'
到 '\u00FF'
之间。字符值用于查找该字符的五个可能属性:空白、字母、数字、字符串引号 和注释字符。每个字符都可以有零个或多个这样的属性。
另外,一个实例还有四个标志。这些标志指示:
典型的应用程序首先构造此类的一个实例,建立一个语法表,然后重复循环,调用该循环的每个迭代中的 nextToken
方法,直到返回值 TT_EOF
。
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 字段中的当前值,而不修改 nval 或 sval 字段中的值。 |
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 |
字段详细信息 |
---|
public int ttype
nextToken
方法之后,此字段将包含刚读取的标记的类型。对于单个字符标记,其值是转换为一个整数的单一字符。对于引用的字符串标记,其值是引号字符。否则,其值是下列值之一:
TT_WORD
指示该标记是一个文字。 TT_NUMBER
指示该标记是一个数字。 TT_EOL
指示已读到行的末尾。如果已使用参数 true
调用 eolIsSignificant
方法,则该字段只能使用此值。 TT_EOF
指示已到达输入流的末尾。 此字段的初始值为 -4。
public static final int TT_EOF
public static final int TT_EOL
public static final int TT_NUMBER
public static final int TT_WORD
public String sval
ttype
字段的值是 TT_WORD
时,当前标记将是一个文字。ttype
字段的值是一个引号字符时,当前标记将是一个引用的字符串标记。
此字段的初始值为 null。
quoteChar(int)
,
TT_WORD
,
ttype
public double nval
构造方法详细信息 |
---|
@Deprecated public StreamTokenizer(InputStream is)
Reader r = new BufferedReader(new InputStreamReader(is)); StreamTokenizer st = new StreamTokenizer(r);
'A'
到 'Z'
、从 'a'
到 'z'
以及从 '\u00A0'
到 '\u00FF'
的所有字节值都被视为字母。 '\u0000'
到 '\u0020'
的所有字节值都被视为空白。 '/'
是注释字符。 '\''
和双引号 '"'
字符串引用字符。
is
- 输入流。
BufferedReader
,
InputStreamReader
,
StreamTokenizer(java.io.Reader)
public StreamTokenizer(Reader r)
r
- 提供输入流的 Reader 对象。
方法详细信息 |
---|
public void resetSyntax()
ordinaryChar
方法。
ordinaryChar(int)
public void wordChars(int low, int hi)
low <= c <= high
范围中的所有字符
c 都是文字成分。文字标记由一个文字成分后跟零或更多文字成分或数字成分组成。
low
- 该范围的低端。
hi
- 该范围的高端。
public void whitespaceChars(int low, int hi)
low <= c <= high
范围中的所有字符
c 都是空白字符。空白字符仅用于分隔输入流中的标记。
指定范围中字符串的任何其他属性设置都被清除。
low
- 该范围的低端。
hi
- 该范围的高端。
public void ordinaryChars(int low, int hi)
low <= c <= high
范围中的所有字符
c 在此标记生成器中都是“普通”字符。关于普通字符的更多信息,请参见
ordinaryChar
方法。
low
- 该范围的低端。
hi
- 该范围的高端。
ordinaryChar(int)
public void ordinaryChar(int ch)
ttype
字段设置为该字符的值。
将行结束符字符变为“普通”字符会妨碍 StreamTokenizer
计算行数的能力。lineno
方法将不再能够在其行计数中反映此类结束符字符的存在。
ch
- 字符。
ttype
public void commentChar(int ch)
指定字符的任何其他属性设置均被清除。
ch
- 字符。
public void quoteChar(int ch)
当 nextToken
方法遇到一个字符串常量时,ttype
字段将被设置为该字符串分隔符,sval
字段被设置为此字符串的正文。
如果遇到字符串引号字符,则将识别一个字符串,该字符串包括字符串引号字符(不包括)到下一个相同的字符串引号字符(不包括)之间、或者到行结束符或文件末尾的所有字符。常规的转义序列(如 "\n"
和 "\t"
)将被识别,并在解析该字符串时转换为单一字符。
指定字符的任何其他属性设置均被清除。
ch
- 字符。
nextToken()
,
sval
,
ttype
public void parseNumbers()
0 1 2 3 4 5 6 7 8 9 . -
都具有“数字”属性。
当解析器遇到具有双精度浮点数字格式的文字标记时,会将该标记视为数字而不是文字,方法是通过将 ttype
字段设置为值 TT_NUMBER
,并将该标记的数字值放入 nval
字段。
public void eolIsSignificant(boolean flag)
nextToken
方法返回
TT_EOL
,还将
ttype
字段设置为此值。
一行是一个字符序列,以回车符 ('\r'
) 或者以新行符 ('\n'
) 结尾。另外,回车符后面紧跟新行符被视为一个单行末尾标记。
如果此 flag
为 false,行末尾字符被视为空白并仅用作分隔标记。
flag
- 为
true
指示行末尾字符为分隔标记;为
false
指示行末尾字符为空白。
nextToken()
,
ttype
,
TT_EOL
public void slashStarComments(boolean flag)
true
,此流标记生成器识别 C 样式注释。后面出现的
/*
和
*/
之间的所有文本将被丢弃。
如果此标志参数为 false
,则不特殊对待 C 样式注释。
flag
- 为
true
指示识别并忽略 C 样式注释。
public void slashSlashComments(boolean flag)
true
,此流标记生成器识别 C++ 样式注释。任何出现的两个连续斜线字符 (
'/'
) 均被视为一个注释的开始并一直延伸到行的末尾。
如果此标志参数为 false
,则不特殊对待 C++ 样式注释。
flag
- 为
true
指示识别并忽略 C++ 样式注释。
public void lowerCaseMode(boolean fl)
true
,则在此标记生成器的
nextToken
方法返回文字标记时(
ttype
字段具有值
TT_WORD
),
sval
字段中的值为小写字母。
如果此标志参数为 false
,则 sval
字段未被修改。
fl
- 为
true
指示所有文字标记应为小写字母。
nextToken()
,
ttype
,
TT_WORD
public int nextToken() throws IOException
ttype
字段中返回。关于该标记的其他信息可能位于此标记生成器的
nval
字段或
sval
字段中。
此类的典型客户机首先建立语法表,然后循环调用 nextToken 来解析后续标记,直到返回 TT_EOF。
ttype
字段的值。
IOException
- 如果发生 I/O 错误。
nval
,
sval
,
ttype
public void pushBack()
nextToken
方法的下一个调用返回
ttype
字段中的当前值,而不修改
nval
或
sval
字段中的值。
nextToken()
,
nval
,
sval
,
ttype
public int lineno()
public String toString()