0

我正在研究一种解析器(爱好项目),它接受一个 Cpp 文件,通读文件中的注释,然后尝试基于该文件创建一个头文件。

我面临的问题是当java.util.Scanner即将阅读第一行时。程序停止并给了我NoSuchElementException. 我真的无法弄清楚应该是什么问题。我检查了路径和路径名是否正确。该文件必须在那里,并且在调试时我也可以读取 Scanner 对象上的字段。那么究竟是什么问题呢?

有些人暗示它可能认为文件中没有行。

问题发生在while((line = scanner.next()) != null) {

@Override
public void run() {
    Scanner scanner = null;
    String filename = "", path = "";
    StringBuilder puBuilder, prBuilder, viBuilder;
    puBuilder = new StringBuilder();
    prBuilder = new StringBuilder();
    viBuilder = new StringBuilder();
    for(File f : files) {
        try {
            filename = f.getName();
            path = f.getAbsolutePath();
            path = path.replace(filename, "");
            filename = filename.replace(".cpp", "");
            scanner = new Scanner(new FileReader(f));
        } catch (FileNotFoundException ex) {
            System.out.println("FileNotFoundException: " + ex.getMessage());
        }

        String line;
        String tag;
        while((line = scanner.next()) != null) {
            line = line.trim();
            if(line.startsWith(PUBLIC)) {
                tag = PUBLIC;
4

2 回答 2

2

罪魁祸首是:

while((line = scanner.next()) != null)

scanner.next()NoSuchElementException如果没有更多可用的令牌,将抛出 a。您可以改用该hasNext方法:

while(scanner.hasNext()) {
    String line = scanner.next();
    //etc.
}
于 2012-12-20T00:05:25.477 回答
0

Scanner.next如果没有更多标记,则抛出 NoSuchElement 异常。

我看到您正在遍历文件列表。您在该列表中获得的第一个文件是否可能是空的?

你能打印出文件名并检查确认吗?

于 2012-12-20T00:07:59.053 回答