【问题标题】:NoSuchElementException in Scanner扫描仪中的 NoSuchElementException
【发布时间】:2012-12-20 00:00:09
【问题描述】:

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

我面临的问题是当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;

【问题讨论】:

  • 您可以尝试将您的while循环从line!=null更改为scanner.hasNext(),然后将scanner.next()放入循环中。

标签: java parsing java.util.scanner


【解决方案1】:

罪魁祸首是:

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

scanner.next() will throw a NoSuchElementException if there are no more tokens available。您可以改用hasNext 方法:

while(scanner.hasNext()) {
    String line = scanner.next();
    //etc.
}

【讨论】:

  • 它以前工作过,(在我制作的多个其他程序中)所以这很奇怪。我会尝试并报告。
【解决方案2】:

如果没有更多令牌,Scanner.next 将引发 NoSuchElement 异常。

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

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

【讨论】:

    猜你喜欢
    • 2013-03-04
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多