1

我有这个代码片段:

 for (f <- file_list){
                  val file_name = path + "\\" + f + ".txt"
                  val line_list = Source.fromFile(file_name).getLines()
                  println (file_name + ": " + line_list.length)
                  println (file_name + ": " + line_list.length)
                  total_number_lines += line_list.size
              }

我有一个文件列表,我为每个文件打开它,将其加载为其行列表,然后计算列表中的行数。

前一个调用line_list.length给出了正确的行号值,但后一个总是返回零。实际上,在length函数执行后,line_list列表似乎是空的。

我真的不明白为什么会这样。

我错过了什么?

4

2 回答 2

6

Source.getLines()返回一个Iterator[String],而不是一个集合,所以调用.length它会完全消耗它。

Source.fromFile(file_name).getLines().toList如果您想多次使用它,您可以使用它。

于 2013-08-25T15:26:58.600 回答
5

getLines()返回一个Iterator[String]并且你只能遍历一个迭代器一次。调用length会耗尽迭代器,因此当到达终点时,对length和的后续调用会被调用,因此它看起来是空的:size

特别重要的是要注意,除非另有说明,否则在调用迭代器的方法后绝不应使用迭代器。两个最重要的例外也是唯一的抽象方法:next 和 hasNext。

于 2013-08-25T15:27:21.020 回答