gpt4 book ai didi

kotlin - 在Kotlin的while循环中包括赋值和对赋值的测试

转载 作者:行者123 更新时间:2023-12-02 13:09:27 39 4
gpt4 key购买 nike

我正在寻找使用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函数合并两个语句。此函数返回最后一个表达式的值。

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

关于kotlin - 在Kotlin的while循环中包括赋值和对赋值的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102339/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com