作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
昨天,这段代码让我很头疼。我通过逐行读取文件来修复它。有任何想法吗 ?
即使文件中的行数大于 1,while 循环似乎也永远不会被执行。
val lines = Source.fromFile( new File("file.txt") ).getLines;
println( "total lines:"+lines.size );
var starti = 1;
while( starti < lines.size ){
val nexti = Math.min( starti + 10, lines.size );
println( "batch ("+starti+", "+nexti+") total:" + lines.size )
val linesSub = lines.slice(starti, nexti)
//do something with linesSub
starti = nexti
}
最佳答案
这确实很棘手,我什至会说这是Iterator
中的一个错误。 . getLines
返回 Iterator
懒惰地进行。所以似乎发生的是,如果你要求 lines.size
迭代器遍历整个文件以计算行数。之后,它“筋疲力尽”:
scala> val lines = io.Source.fromFile(new java.io.File("....txt")).getLines
lines: Iterator[String] = non-empty iterator
scala> lines.size
res4: Int = 15
scala> lines.size
res5: Int = 0
scala> lines.hasNext
res6: Boolean = false
size
时两次,结果为零。
lines.toSeq
.或者你忘记了
size
并进行“正常”迭代:
while(lines.hasNext) {
val linesSub = lines.take(10)
println("batch:" + linesSub.size)
// do something with linesSub
}
关于这个while循环代码中的Scala古怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770060/
我正在维护一个程序,需要解析以“几乎结构化”的文本形式存在的数据。即,生成它的各种程序使用稍微不同的格式,它可能已被打印出来并通过 OCR 重新输入(是的,我知道),但有错误等,所以我需要使用启发式方
已解决:感谢 dominic hamon 解决了这个问题。这一切都归结为尝试在 kinda 空对象上调用函数。它可以使用对象的一部分,但不能使用其他部分。 我什至不知道这会发生。 问题 我遇到了一个奇
我是一名优秀的程序员,十分优秀!