在 Kotlin 的 while 循环中包括赋值和赋值测试
Include both assignment and test on assigned value in while loop for Kotlin
我正在寻找一个文本文件的最后一行,使用我发现经常在 Java 中使用的相当标准的 while 循环习惯用法。
我有一个不太紧凑的版本。但是我想使用的语法在 Kotlin 中似乎不是有效语法。我的首选方法包括在同一行中对该作业进行赋值和 Boolean
测试。
诚然这是一件小事,但我希望更好地实现我的 Kotlin 代码。
fun readLastLine(file:File):String {
val bufferedReader = file.bufferedReader()
var lastLine=""
//valid
var current = bufferedReader.readLine()
while(current != null) {
lastLine=current
current = bufferedReader.readLine()
}
//return lastLine
//not valid...
//while((current=bufferedReader.readLine())!=null){
// lastLine=current
//}
//responding to comment below,
//preferred/terse answer using file.readLines
//this reads all the lines into a list, then returns the last
return file.readLines().last()
}
在 Kotlin 中,赋值不是一个表达式,其值等于赋值。
您可以在 Kotlin 中使用 run
函数组合两个语句。这个函数returns最后一个表达式的值。
var current = ""
while (run {
current = bufferedReader.readLine()
current != null
}) { // or while (run { current = bufferedReader.readLine(); current != null }) {
lastLine = current
}
但是,您可以在 Kotlin 中使用 File.forEachLine()
进一步减少代码。
fun readLastLine(file: File): String {
var lastLine = ""
file.forEachLine { line ->
lastLine = line
}
return lastLine
}
或更短,
fun readLastLine(file: File): String {
var lastLine = ""
file.forEachLine { lastLine = it }
return lastLine
}
这使用 BufferedReader
并在内部自动关闭:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/java.io.-file/for-each-line.html
我正在寻找一个文本文件的最后一行,使用我发现经常在 Java 中使用的相当标准的 while 循环习惯用法。
我有一个不太紧凑的版本。但是我想使用的语法在 Kotlin 中似乎不是有效语法。我的首选方法包括在同一行中对该作业进行赋值和 Boolean
测试。
诚然这是一件小事,但我希望更好地实现我的 Kotlin 代码。
fun readLastLine(file:File):String {
val bufferedReader = file.bufferedReader()
var lastLine=""
//valid
var current = bufferedReader.readLine()
while(current != null) {
lastLine=current
current = bufferedReader.readLine()
}
//return lastLine
//not valid...
//while((current=bufferedReader.readLine())!=null){
// lastLine=current
//}
//responding to comment below,
//preferred/terse answer using file.readLines
//this reads all the lines into a list, then returns the last
return file.readLines().last()
}
在 Kotlin 中,赋值不是一个表达式,其值等于赋值。
您可以在 Kotlin 中使用 run
函数组合两个语句。这个函数returns最后一个表达式的值。
var current = ""
while (run {
current = bufferedReader.readLine()
current != null
}) { // or while (run { current = bufferedReader.readLine(); current != null }) {
lastLine = current
}
但是,您可以在 Kotlin 中使用 File.forEachLine()
进一步减少代码。
fun readLastLine(file: File): String {
var lastLine = ""
file.forEachLine { line ->
lastLine = line
}
return lastLine
}
或更短,
fun readLastLine(file: File): String {
var lastLine = ""
file.forEachLine { lastLine = it }
return lastLine
}
这使用 BufferedReader
并在内部自动关闭:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/java.io.-file/for-each-line.html