Java StreamTokenizer
Java的StreamTokenizer类(java.io.StreamTokenizer)可以将从Reader读取的字符标记为令牌。例如,在字符串"玛丽有只小羊羔"中,每个单词都是一个单独的标记。
解析文件或者计算机语言时,通常将输入分成令牌,然后再进一步处理它们。此过程也称为"词汇化"或者"标记化"。
使用Java" StreamTokenizer",我们可以在底层" Reader"中遍历令牌。我们可以通过在循环内调用StreamTokenizer的nextToken()方法来实现。每次调用nextToken()
之后,StreamTokenizer
都有几个字段,我们可以阅读以了解读取了哪种令牌,令牌的值等。这些字段是:
ttype | 读取的令牌类型(单词,数字,行尾) |
sval | 令牌的字符串值,如果令牌是一个字符串(单词) |
nval | 令牌的数字值(如果令牌是数字)。 |
StreamTokenizer示例
这是一个简单的Java StreamTokenizer示例:
StreamTokenizer streamTokenizer = new StreamTokenizer( new StringReader("Mary had 1 little lamb...")); while(streamTokenizer.nextToken() != StreamTokenizer.TT_EOF){ if(streamTokenizer.ttype == StreamTokenizer.TT_WORD) { System.out.println(streamTokenizer.sval); } else if(streamTokenizer.ttype == StreamTokenizer.TT_NUMBER) { System.out.println(streamTokenizer.nval); } else if(streamTokenizer.ttype == StreamTokenizer.TT_EOL) { System.out.println(); } } streamTokenizer.close();
Java的StreamTokenizer能够识别标识符,数字,带引号的字符串和各种注释样式。我们还可以指定将哪些字符解释为空格,注释的开始,结束等。在开始解析其内容之前,所有这些操作都在StreamTokenizer上进行了配置。有关更多信息,请参见JavaDoc。
关闭StreamTokenizer
从StreamTokenizer中读取令牌完成后,我们应该记住将其关闭。关闭StreamTokenizer
也将关闭StreamTokenizer
正在读取的Reader
实例。
关闭StreamTokenizer是通过调用其close()方法来完成的。这是关闭StreamTokenizer
的样子:
streamTokenizer.close();
不幸的是,Java StreamTokenizer没有实现AutoCloseable接口,因此我们不能使用Java try-with-resources构造将其关闭。相反,请查看Java IO异常处理教程,以获取有关如何处理异常以及使用try-finally块正确关闭StreamTokenizer的更多信息。