简体   繁体   English

Java Scanner - While 循环不继续

[英]Java Scanner - While Loop not continuing

I'm running a bit of code to read data from a file and then split each line into an array for easier calculating.我正在运行一些代码来从文件中读取数据,然后将每一行拆分为一个数组以便于计算。

However, I've come across a problem where my while loop isn't continuing despite the fact I know there is more data in the text file.但是,我遇到了一个问题,尽管我知道文本文件中有更多数据,但我的 while 循环没有继续。

Any help with the problem would be greatly appreciated!对问题的任何帮助将不胜感激!

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数据.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 

sc.nextLine and sc.hasNextLine are blocking calls by design, so it will remain blocking until new input comes in. see Scanne.hasline() documentation sc.nextLine 和 sc.hasNextLine 在设计上会阻塞调用,因此它会一直阻塞直到新输入进来。请参阅Scanne.hasline() 文档

Could it be that some lines in code are missing CR LF delimiter?可能是代码中的某些行缺少 CR LF 分隔符? I took you sample, opened it with notepad++ and viewed the whitespace (under view->show symbol).我拿了你的样本,用记事本++打开它并查看空格(在视图->显示符号下)。 and saw the following:并看到以下内容:

...
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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM