【问题标题】:How do I make this bufferedReader loop keep going?如何使这个 bufferedReader 循环继续运行?
【发布时间】:2016-04-06 08:15:01
【问题描述】:

我有一个 BufferedReader 循环来检查下一行是否!= null,如果该行上有文本,读者将阅读该行,现在我成功地做到了, 它读取该行,然后它不会读取下一行,因为它已经考虑了 if 循环,我该怎么做才能让它继续读取行,直到没有更多行要读取?我可以使用 while 循环,但我有点不知道该把它放在哪里。

int numberOfLines = 0;
String[] textData = new String[numberOfLines];

if (red.readLine() != null) {
    numberOfLines++;
    int i;
    for (i = 0; i < numberOfLines; i++) {
        textData[i] = red.readLine();
        //System.out.println(textData[i]);
        textArea.append("\n");  //Break line after every read line
        textArea.append(textData[i]);
    }
}

【问题讨论】:

  • 不要使用 if 块,使用 while 循环
  • 使用 循环 而不是 if。或者,更好的是,使用Files.lines
  • 哇,谢谢,我感觉自己像个白痴。
  • 好吧,numberOfLines = 0 因此textData.size == 0。你期待什么?
  • 如我所说,使用Files.lines。停止学习古老而过时的技术......

标签: java loops boolean


【解决方案1】:

你有:

   int numberOfLines = 0;
   String[] textData = new String[numberOfLines];

所以你的数组大小为零。 稍后再做:

numberOfLines++;

不增长数组。事实上,你不能增长一个数组。 您需要一个可以增长的数据结构(如 ArrayList)。

另一种方法请参见How to read from files with Files.lines(...).forEach(...)?

【讨论】:

    【解决方案2】:

    使用while 循环。由于 Java 数组是固定长度的,因此您需要将元素复制到新扩展的数组中。另外,使用System.lineSeparator()(不是每个系统都使用\n)。类似的,

    String[] textData = new String[0];
    String line;
    int i = 0;
    while ((line = red.readLine()) != null) {
        String[] dest = new String[textData.length + 1];
        System.arraycopy(textData, 0, dest, 0, textData.length);
        dest[i++] = line;
        textData = dest;
        textArea.append(System.lineSeparator() + line);
    }
    

    或者,您可以读入Collection(如ArrayList)。类似的,

    List<String> textData = new ArrayList<>();
    String line;
    while ((line = red.readLine()) != null) {
        textData.add(line);
        textArea.append(System.lineSeparator() + line);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-07-26
      • 2023-03-19
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      相关资源
      最近更新 更多