我的一个朋友正在学习Scala,并编写了以下简单代码来跟踪文件中的最长行:
val longest = (filename:String) => {
val is = new FileInputStream(filename)
val buf = new Array[Byte](1024)
var longest=0 //keep track of the longest line
var lastPos=0
var read=0
try {
read = is.read(buf)
while (read > 0) {
for (i<-0 until read) {
if (buf(i) == '\n') {
val size=i-lastPos-1
lastPos=i
if (size>longest) {
longest=size
}
}
}
lastPos-=buf.length
read=is.read(buf)
}
} finally {
is.close()
}
longest
}
我也是Scala的新手,但是我很确定此代码中还有很多用于flatMaps和其他函数的空间。
有人可以发布此功能的版本吗?
最佳答案
替代实现:
def longest(filename: String) =
Source.fromFile(filename).getLines.map(_.size).max
简要说明:
getLines
返回文件中各行的迭代器;与
map(_.size)
等效的map(line => line.size)
返回行长的新迭代器max
返回最大行长。