Java扫描器-While循环未继续

时间:2019-04-02 23:00:50

标签: java

我正在运行一些代码,以从文件中读取数据,然后将每一行拆分为一个数组,以便于计算。

但是,我遇到一个问题,尽管我知道文本文件中有更多数据,但我的while循环无法继续。

任何与该问题有关的帮助将不胜感激!

public void test() throws IOException {
    FileReader fr = null;
    Scanner sc = null;

    String file_name = "data.txt";

    try {
        fr = new FileReader(file_name);
        sc = new Scanner(fr);


        while(sc.hasNextLine()){
            int year = 0;
            int month = 0;
            double sales_total = 0;
            String lines[] = sc.nextLine().split(" ");
            for (int i = 0; i < lines.length; i++){
                int value = Integer.valueOf(lines[i]);
                if (value > 2000) {
                   year = value;
                }
                else if (i == 1){
                    month = value;
                }
                else {
                    sales_total += value;
                }
                System.out.println(sales_total);
            }
            System.out.println(year + " - " + month + " - "+sales_total);
        }
    } 
    catch(IOException e) {
        System.out.println(e);
    } 
    finally {
        if (fr != null) { fr.close();}  
        if (sc != null) { sc.close();}
    }
}

data.txt

2016 02 5 18 12
2016 12  14  10   3   5   6   8  20   7  10  
2016 09  17   3  16  18  19  10   6  10  
2016 10   5   3  12   4  12  15  
2016 11  18  19  16   2   
2017 01   5   5   4  11
2017 02  41   3
2017 06   3   6  18 
2017 07  15  18  15  12   9  15
2017 11   9   8   9   4  20  20  19   3 
2018 01  19  19   3  10  20  20  18  14   3   
2017 12   8  13  18   6   
2018 11  10   2  11   8  17   8   6  18  15   1 

1 个答案:

答案 0 :(得分:1)

sc.nextLine和sc.hasNextLine在设计上会阻止调用,因此它将一直处于阻止状态,直到有新的输入进入为止。请参见Scanne.hasline() documentation

可能是代码中的某些行缺少CR LF分隔符吗? 我为您提供了示例,并用notepad ++打开了它,并查看了空格(在view-> show symbol下)。并看到以下内容:

...
2017 11   9   8   9   4  20  20  19   3 CR LF
2018 01  19  19   3  10  20  20  18  14   3 CR LF  
2017 12   8  13  18   6   CR LF
2018 11  10   2  11   8  17   8   6  18  15   1