以下程序打印每个包含非注释内容的行的行号和任何字符串标记。
它大部分时间都有效,但有时候会出现问题...例如,在log4j的以下源文件Category.java中,从注释行144开始,有时会跳过一些行: http://logging.apache.org/log4j/1.2/xref/org/apache/log4j/Category.html StreamTokenizer有时会在javadoc注释结尾处跳过一些行。
这是我的代码:
import java.io.FileReader; import java.io.IOException; import java.io.Reader; import java.io.StreamTokenizer; public class LinesWithCodeFinder { public static void main(String[] args) throws IOException { String filePath = args[0]; Reader reader = new FileReader(filePath); StreamTokenizer tokenizer = new StreamTokenizer(reader); tokenizer.slashStarComments(true); tokenizer.slashSlashComments(true); tokenizer.eolIsSignificant(false);
int ttype = 0; int lastline = -1; String s = ""; while (ttype != StreamTokenizer.TT_EOF) { ttype = tokenizer.nextToken(); int lineno = tokenizer.lineno(); String sval = ttype == StreamTokenizer.TT_WORD ? tokenizer.sval : ""; if (lineno == lastline) { s += " " + sval; } else { if (lastline != -1) System.out.println(lastline + "\t" + s); s = sval; } lastline = lineno; } } }
有人了解StreamTokenizer的行为原因吗?
欢迎提供任何过滤掉注释的替代方法。