【问题标题】:How to increment a while loop to read the next line on a file如何增加一个while循环来读取文件的下一行
【发布时间】:2015-10-21 23:24:47
【问题描述】:

我正在编写代码 首先)询问用户一个文件名 第二)读取文件并将每一行放入一个 ArrayList 第三)打印出ArrayList

我的代码使用 BufferedReader 读取文件,但它只打印出第一行 25 次,而不是打印出 25 个不同的行。

这就是我的 while 循环的样子。我不知道如何增加它

ArrayList<String> stringArray = new ArrayList<String>();
BufferedReader reader = null;
reader = new BufferedReader(new FileReader(fileName));

String line = reader.readLine();
while(reader.readLine() != null){
    stringArray.add(line);
}
return stringArray;

有什么想法吗?

【问题讨论】:

标签: java arraylist while-loop bufferedreader


【解决方案1】:

您没有在每次运行时读取变量的行,您需要在 while 循环中读取它。

String line = reader.readLine();
while(line != null){
    stringArray.add(line);
    line = reader.readLine(); // read the next line
}
return stringArray;

【讨论】:

  • 有些人也喜欢在while部分做作业,比如:while(line = reader.readLine() != null){ ...
【解决方案2】:

这不是首选的解决方案。只是表明它可以以不同的方式完成

或者您可以使用 do...while 而不是 while...do。

String line;
do {
    line = reader.readLine();
    if (line != null) {
       stringArray.add(line);
    }
} while (line != null);

您可以看到为什么这不是首选解决方案。您正在执行 2 次空检查,而您可以逃脱 1 次。

【讨论】:

  • 为什么发布“不是首选解决方案”?
  • 出于同样的原因,我们研究除 Quicksort、Mergesort 和 Heapsort 之外的排序算法。有时看到不同的做事方式会提高我们的理解和欣赏。有时它提供背景。有时,不同的构造可以证明在不同的情况下有用。当一个while循环只需一个额外的标志就可以完成完全相同的事情时,为什么Java中有一个do while循环?
  • 抱歉,我没有将它呈现为一段“好”的代码。我准确地描述了为什么它不是首选。顺便说一句,许多程序员认为根据您的解决方案使用 break 也是糟糕的编码。
【解决方案3】:
 while (true) {
    String line = reader.readLine(); 
    if (line == null) break;
    stringArray.add(line);
 }
 return stringArray;

【讨论】:

    猜你喜欢
    • 2017-09-22
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2012-01-24
    • 2016-07-06
    • 1970-01-01
    • 2020-12-23
    相关资源
    最近更新 更多