Моя цель - проанализировать исходные файлы java, чтобы найти номера строк, содержащие код без комментариев.Поскольку StreamTokenizer имеет функции slashStarComments () и slashSlashComments (), я решил использовать его для фильтрации строк, содержащих только комментарии и без кода.
Программа, приведенная ниже, печатает номера строк и любые строковые токены на этомстрока, для каждой строки, которая имеет что-то, что не является комментарием.
Это работает в большинстве случаев времени, но иногда нет ... Например, номера строк пропускаются время от времени, а затем начинаются со строки комментария 144 в следующем исходном файле из log4j,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 ведет себя так, как он?
Буду признателен за любые альтернативные идеи о том, как отфильтровать комментарии.