在这里看看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 /little lamb..."
,输出为
Mary
had
1.0
/
可以作为EOF代币吗?如果是这样,为什么?- 有没有办法将
/
区分为 EOF 以外的其他令牌。
根据文档,/
是StreamTokenizer
中的注释字符。在它之后的所有内容,直到EOL或EOF都将被忽略,不会被标记化。
例如,继续您给出的示例,如果字符串"Mary had 1 / 2n little lamb..."
,则2
被注释掉并且不会被标记化,并且在n
后将恢复标记化。所以输出将是:
Mary
had
1.0
little
lamb...
只是添加到上面的答案.由于/
是StreamTokenizer中的注释字符,并一直持续到行尾。因此,您必须在字符串中添加新行n
或r
所以"Mary had 1 / n little /nlamb..."
或 "Mary had 1 / r little/rlamb..."
两者都会为您工作