Java 除法运算符“/”的StreamTokenizer行为

Java 除法运算符“/”的StreamTokenizer行为,java,string,eof,stringreader,Java,String,Eof,Stringreader,看看StreamTokenizer的演示代码。当StringReader中的字符串之间存在/时,它似乎无法正常工作。这是上面提到的链接中的代码 StreamTokenizer tokenizer = new StreamTokenizer( new StringReader("Mary had 1 little lamb...")); while(tokenizer.nextToken() != StreamTokenizer.TT_EOF){ if(toke

看看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();
        }
    }
例如,对于字符串Mary had 1 little lamb…,输出为

Mary
had
1.0
little
lamb...
Mary
had
1.0
对于字符串,Mary有1/小羊羔…,输出为

Mary
had
1.0
little
lamb...
Mary
had
1.0
是否/作为EOF令牌工作?若然,原因为何? 是否有任何方法将/区分为除EOF以外的其他标记。 根据,/是StreamTokenizer中的注释字符。在EOL或EOF之前,它后面的所有内容都将被忽略,并且不会被标记化

例如,要继续您给出的示例,如果字符串为Mary had 1/2\n little lamb…,则2将被注释掉,并且不会被标记化,标记化将在\n之后恢复。因此,输出将是:

Mary
had
1.0
little
lamb...
根据,/是StreamTokenizer中的注释字符。在EOL或EOF之前,它后面的所有内容都将被忽略,并且不会被标记化

例如,要继续您给出的示例,如果字符串为Mary had 1/2\n little lamb…,则2将被注释掉,并且不会被标记化,标记化将在\n之后恢复。因此,输出将是:

Mary
had
1.0
little
lamb...

只是补充上面的答案 .Since/是StreamTokenizer中的注释字符,并一直持续到行尾。因此,您必须在字符串中添加新行\n或\r 所以Mary有1/\n个小/\n lamb。。。或
玛丽有一个/\r小/\r男孩。。。这两种方法都适用于您

只需添加上述答案即可 .Since/是StreamTokenizer中的注释字符,并一直持续到行尾。因此,您必须在字符串中添加新行\n或\r 所以Mary有1/\n个小/\n lamb。。。或
玛丽有一个/\r小/\r男孩。。。这两种都适合你

我觉得还可以。你能分享一段代码片段,你得到的输出和你期望的输出吗?到底是什么不起作用?注意:已弃用。我已编辑该问题。你现在可以找到更多的细节。我觉得还可以。你能分享一段代码片段,你得到的输出和你期望的输出吗?到底是什么不起作用?注意:已弃用。我已编辑该问题。您现在可以找到更多详细信息。@Mureinik这是一个非常好的答案,伙计:。我不确定选民是否期望更多what@Mureinik:我可以用什么方式解析和打印/作为单独的令牌?一种方法是将/替换为某些字符串,我们确信这些字符串不会以原始字符串的形式出现,在if-else条件下,检查并将特定字符串替换为/。但这似乎不是一种优雅的方式。还有更好的办法吗?@Mureinik这是个很好的答案,伙计:。我不确定选民是否期望更多what@Mureinik:我可以用什么方式解析和打印/作为单独的令牌?一种方法是将/替换为某些字符串,我们确信这些字符串不会以原始字符串的形式出现,在if-else条件下,检查并将特定字符串替换为/。但这似乎不是一种优雅的方式。还有更好的办法吗?