我有下面的代码,它应该遍历每个标记,当指定的字符按顺序出现时,它意味着注释已经开始或结束。
我创建了最后一个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'跳过了太多的令牌。这可能吗?如果是这样,有没有办法解决这个问题?
如有任何帮助,不胜感激
。看起来你在结束令牌检测中有一个bug。您需要提供源文本。您的代码目前不能识别像cccc--->
这样的结尾,因为它返回cccc—作为整个单词标记。