阅读(2117) (0)

鸿蒙OS StreamTokenizer

2022-10-17 09:53:07 更新

StreamTokenizer

java.lang.Object

|---java.io.StreamTokenizer

public class StreamTokenizer
extends Object

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

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

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

  • 行终止符是作为标记返回还是被视为仅分隔标记的空白。
  • 是否要识别和跳过 C 样式的注释。
  • 是否要识别和跳过 C++ 样式的注释。
  • 标识符的字符是否转换为小写。

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

Since:

JDK1.0

字段摘要

修饰符和类型 字段 描述
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) 创建一个解析给定字符流的分词器。

方法总结

修饰符和类型 方法 描述
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

字段详细信息

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

一个常量,表示已读取单词标记。

nval

public double nval

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

该字段的初始值为 0.0。

sval

public String sval

如果当前标记是单词标记,则此字段包含一个字符串,给出单词标记的字符。 当前标记是带引号的字符串标记时,此字段包含字符串的正文。

当 ttype 字段的值为 TT_WORD 时,当前标记是一个单词。 当 ttype 字段的值是引号字符时,当前标记是带引号的字符串标记。

该字段的初始值为空。

ttype

public int ttype

调用 nextToken 方法后,该字段包含刚刚读取的令牌的类型。 对于单个字符标记,其值为单个字符,转换为整数。 对于带引号的字符串标记,其值为引号字符。 否则,其值为以下之一:

  • TT_WORD 表示标记是一个词。
  • TT_NUMBER 表示令牌是一个数字。
  • TT_EOL 表示已读取行尾。 如果使用参数 true 调用了 eolIsSignificant 方法,则该字段只能具有此值。
  • TT_EOF 表示已到达输入流的末尾。

该字段的初始值为-4。

构造函数详细信息

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 一个输入流。

StreamTokenizer

public StreamTokenizer(Reader r)

创建一个解析给定字符流的分词器。

参数:

参数名称 参数描述
r 提供输入流的 Reader 对象。

Since:

JDK1.1

方法详情

resetSyntax

public void resetSyntax()

重置此标记器的语法表,以便所有字符都是“普通的”。

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 在此标记器中都是“普通的”。

参数:

参数名称 参数描述
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)

确定是否将行尾视为标记。 如果 flag 参数为 true,则此标记器将行尾视为标记; nextToken 方法返回 TT_EOL 并在读取行尾时将 ttype 字段设置为此值。

行是以回车符 ('\r') 或换行符 ('\n') 结尾的字符序列。 此外,紧跟换行符的回车符被视为单个行尾标记。

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

参数:

参数名称 参数描述
flag true 表示行尾字符是单独的标记; false 表示行尾字符是空格。

slashStarComments

public void slashStarComments(boolean flag)

确定分词器是否识别 C 风格的注释。 如果 flag 参数为 true,则此流标记器识别 C 样式注释。 连续出现 // 之间的所有文本都将被丢弃。

如果 flag 参数为 false,则不会对 C 样式注释进行特殊处理。

参数:

参数名称 参数描述
flag true 表示识别和忽略 C 风格的注释。

slashSlashComments

public void slashSlashComments(boolean flag)

确定标记器是否识别 C++ 样式的注释。 如果 flag 参数为真,则此流标记器识别 C++ 样式的注释。 任何出现的两个连续斜杠字符 ('/') 都被视为延伸到行尾的注释的开头。

如果 flag 参数为 false,则不会对 C++ 样式的注释进行特殊处理。

参数:

参数名称 参数描述
flag true 表示识别和忽略 C++ 风格的注释。

lowerCaseMode

public void lowerCaseMode(boolean fl)

确定单词标记是否自动小写。 如果 flag 参数为真,则每当返回单词标记时,sval 字段中的值都会小写(通过此标记器的 nextToken 方法,ttype 字段的值为 TT_WORD。

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

参数:

参数名称 参数描述
fl true 表示所有单词标记都应该小写。

nextToken

public int nextToken() throws IOException

从此标记器的输入流中解析下一个标记。 下一个标记的类型在 ttype 字段中返回。 有关令牌的其他信息可能在此标记器的 nval 字段或 sval 字段中。

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

返回:

ttype 字段的值。

Throws:

Throw名称 Throw描述
IOException 如果发生 I/O 错误。

pushBack

public void pushBack()

导致对该标记器的 nextToken 方法的下一次调用返回 ttype 字段中的当前值,而不是修改 nval 或 sval 字段中的值。

lineno

public int lineno()

返回当前行号。

返回:

此流标记器的当前行号。

toString

public String toString()

返回当前流标记的字符串表示形式和它出现的行号。

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

Token['a'], line 10

覆盖:

类 Object 中的 toString

返回:

令牌的字符串表示