扫描仪找不到空行,返回索引超出范围

时间:2014-10-01 13:41:23

标签: java

我正在尝试逐行阅读文件,并对以字符“Q'”开头的每一行采取措施。在尝试了SO和JavaDoc的许多解决方案后,我不断收到此错误。我无法弄清楚我的生活是什么。我的方法如下:

public Question makeQuestion(){
    //scanner checks line and takes action
    while(fileScan.hasNextLine()){

        //save the line
        String line = fileScan.nextLine();

        //if line is blank move on to next line
        if(line.isEmpty()) fileScan.nextLine();

        //if line starts with Q do something
        if(line.charAt(0) == 'Q'){
            System.out.println(line);
        }

    }

该方法查找以Q开头但在此之后失败的第一行。我能做错什么?

4 个答案:

答案 0 :(得分:0)

您不想在循环中执行send nextLine()。

试试这个:

while(fileScan.hasNextLine()){

    //save the line
    String line = fileScan.nextLine();

    //if line is NOT empty AND starts with Q do something
    if(!line.isEmpty() && line.charAt(0) == 'Q'){
        System.out.println(line);
    }

}

答案 1 :(得分:0)

public Question makeQuestion(){
    //scanner checks line and takes action
    while(fileScan.hasNextLine()){

        //save the line
        String line = fileScan.nextLine();


        //if line starts with Q do something
        if(line != null && !line.isEmpty() && line.charAt(0) == 'Q'){
            System.out.println(line);
        }

}

如果您在循环中调用nextLine两次,则可能会在第一次调用中到达最后一行。

在这种情况下,第二次调用将抛出异常,因为没有下一行。

答案 2 :(得分:0)

如果该行为空,则不应再次读取该行。

public Question makeQuestion(){
//scanner checks line and takes action
while(fileScan.hasNextLine()){

    //save the line
    String line = fileScan.nextLine();

    //if line starts with Q do something
    if(!line.isEmpty() && line.charAt(0) == 'Q'){
        System.out.println(line);
    }

}

答案 3 :(得分:0)

你的逻辑,

if(line.isEmpty()) fileScan.nextLine();

不正确(一方面,它不会更新line,因此您输出空行)。最简单的解决方案可能是使用,

if(line.isEmpty()) continue;