树叶云鸿蒙OS教程:鸿蒙OS StreamTokenizer

StreamTokenizer

java.lang.Object

|—java.io.StreamTokenizer

public class StreamTokenizer
extends Object

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

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

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

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

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

Since:

JDK1.0

字段摘要

修饰符和类型字段描述
doublenval如果当前标记是数字,则此字段包含该数字的值。
Stringsval如果当前标记是单词标记,则此字段包含一个字符串,给出单词标记的字符。
static intTT_EOF一个常量,指示已读取流的结尾。
static intTT_EOL一个常量,表示已读取行尾。
static intTT_NUMBER表示已读取数字标记的常量。
static intTT_WORD一个常量,表示已读取单词标记。
intttype调用 nextToken 方法后,该字段包含刚刚读取的令牌的类型。

构造函数摘要

构造函数描述
StreamTokenizer(InputStream is)已弃用。 从 JDK 版本 1.1 开始,标记输入流的首选方法是将其转换为字符流。
StreamTokenizer(Reader r)创建一个解析给定字符流的分词器。

方法总结

修饰符和类型方法描述
voidcommentChar(int ch)指定字符参数开始一个单行注释。
voideolIsSignificant(boolean flag)确定是否将行尾视为标记。
intlineno()返回当前行号。
voidlowerCaseMode(boolean fl)确定单词标记是否自动小写。
intnextToken()从此标记器的输入流中解析下一个标记。
voidordinaryChar(int ch)指定字符参数在此标记器中是“普通的”。
voidordinaryChars(int low, int hi)指定范围 low <= c <= high 中的所有字符 c 在此标记器中都是“普通的”。
voidparseNumbers()指定应由此标记器解析数字。
voidpushBack()导致对该标记器的 nextToken 方法的下一次调用返回 ttype 字段中的当前值,而不是修改 nval 或 sval 字段中的值。
voidquoteChar(int ch)指定此字符的匹配对分隔此标记器中的字符串常量。
voidresetSyntax()重置此标记器的语法表,以便所有字符都是“普通的”。
voidslashSlashComments(boolean flag)确定标记器是否识别 C++ 样式的注释。
voidslashStarComments(boolean flag)确定分词器是否识别 C 风格的注释。
StringtoString()返回当前流标记的字符串表示形式和它出现的行号。
voidwhitespaceChars(int low, int hi)指定范围 low <= c <= high 的所有字符 c 都是空白字符。
voidwordChars(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,则行尾字符被视为空格并仅用于分隔标记。

参数:

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

slashStarComments

public void slashStarComments(boolean flag)

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

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

参数:

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

slashSlashComments

public void slashSlashComments(boolean flag)

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

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

参数:

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

lowerCaseMode

public void lowerCaseMode(boolean fl)

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

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

参数:

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

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

返回:

令牌的字符串表示

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/156801.html<

(0)
运维的头像运维
上一篇2025-03-16 02:10
下一篇 2025-03-16 02:11

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注