Java StreamTokenizer

时间:2020-01-09 10:36:07  来源:igfitidea点击:

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的更多信息。