StreamTokenizer.nextToken跳过太多令牌?

时间:2014-08-01 07:25:12

标签: java stream token tokenize

我有以下代码,应该遍历每个令牌,当指定的字符按顺序出现时,表示评论已经开始或结束。

如果位置不在注释之间,我创建了最后一个if语句来执行某些代码。

int commentFound = -1;
                int commentEnded = -1;
                do {
                    int token = st.nextToken();
                    switch (token) {
                        case StreamTokenizer.TT_EOF:
                            System.out.println("End of File encountered.");
                            eof = true;

                        default:
                            if ((token == '<')) {
                                System.out.println(st.sval);
                                if (st.nextToken() == '!') {
                                    System.out.println(st.sval);
                                    if (st.nextToken() == '-') {
                                        if (st.nextToken() == '-') {
                                            if (st.nextToken() == '-') {
                                                System.out.println("Comment Found on line number: " + st.lineno());
                                                commentFound = st.lineno();
                                            }
                                        }
                                    }
                                }
                            } 
                            else if ((token == '-')) {
                                if (st.nextToken() == '-') {
                                    if (st.nextToken() == '-') {
                                        if (st.nextToken() == '>') {
                                            System.out.println("Comment Ended on: " + st.lineno());
                                            commentEnded = st.lineno();
                                        }
                                    }
                                }
                            }
                            if ((commentFound != -1) && !((st.lineno() > commentFound) && (st.lineno() < commentEnded))) {

始终会找到评论开始标记,但并不总是找到结束标记。经过一些调试后,我想我发现'nextToken'正在跳过太多的令牌。这可能吗 ?如果是这样,有没有办法解决这个问题?

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

。看起来您在结束令牌检测中存在错误。您需要提供源文本。 您的代码当前无法识别为此cccc--->,因为它将cccc ---作为整个单词标记返回。