1

在此处查看 StreamTokenizer 的演示代码。当存在字符串时,它似乎无法正常工作/(只需在/字符串之间添加StringReader)。这是来自上述链接的代码,

StreamTokenizer tokenizer = new StreamTokenizer(
    new StringReader("Mary had 1 little lamb..."));

    while(tokenizer.nextToken() != StreamTokenizer.TT_EOF){

        if(tokenizer.ttype == StreamTokenizer.TT_WORD) {
            System.out.println(tokenizer.sval);
        } else if(tokenizer.ttype == StreamTokenizer.TT_NUMBER) {
            System.out.println(tokenizer.nval);
        } else if(tokenizer.ttype == StreamTokenizer.TT_EOL) {
            System.out.println();
        }
    }

例如,对于 string "Mary had 1 little lamb...",输出为

Mary
had
1.0
little
lamb...

对于字符串,"Mary had 1 /little lamb...",输出为

Mary
had
1.0
  • /可以作为 EOF 令牌工作吗?如果是这样,为什么?
  • 除了EOF之外,有什么方法可以区/分为不同的令牌。
4

2 回答 2

3

根据文档/是 a 中的注释字符StreamTokenizer。在它之后的所有内容,直到 EOL 或 EOF 都将被忽略并且不会被标记化。

例如,继续您给出的示例,如果字符串是"Mary had 1 / 2\n little lamb...",2被注释掉并且不会被标记化,并且标记化将在\n. 所以输出将是:

Mary
had
1.0
little
lamb...
于 2015-04-24T12:18:02.310 回答
1

只需添加到上面的答案 .Since/是 StreamTokenizer 中的注释字符并继续直到行尾。因此,您必须添加新行\n\r在字符串中添加"Mary had 1 / \n little /\nlamb...""Mary had 1 / \r little/\rlamb..."两者都适合您

于 2015-04-24T12:43:18.397 回答