我的目標是分析java源文件以查找包含非註釋代碼的行號。由於StreamTokenizer具有slashStarComments()和slashSlashComments(),我想我會用它來過濾只有註釋和沒有代碼的行。使用StreamTokenizer過濾Java註釋
下面的程序打印行號和該行上的任何字符串標記,對於每行不具有註釋的行。
它的工作原理最的時間,但有時不... 例如,行號得到跳過飄飛與log4j的下列源文件中的註釋行144開始時,Category.java: 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極表現爲它呢?
有關如何過濾評論的任何替代想法將不勝感激。