这是我从Java移植过来的一些代码:
var audioDataString = ""
val jsonReader = BufferedReader(InputStreamReader(context.resources.openRawResource(resourceName)))
val jsonBuilder = StringBuilder()
var line: String? = null
while ((line = jsonReader.readLine()) != null) {
jsonBuilder.append(line).append("")
}
“ (line = jsonReader.readLine())” 给我以下错误:声明不是表达式,并且在此上下文中仅允许表达式。
如何在Kotlin中正确执行此操作?
谢谢。
答案 0 :(得分:6)
在Kotlin标准库中有many different extensions,您可以在此处用于输入流,文件,阅读器等。对于这种用例,Reader.forEachLine
将是最简单的使用方式:
jsonReader.forEachLine { line ->
jsonBuilder.append(line)
}
这使您可以逐行处理Reader
,并在迭代结束后自动关闭Reader
。
您可能还想看看readLines
,lineSequence
和useLines
,它们可以在更复杂的情况下为您提供帮助。
答案 1 :(得分:3)
不幸的是,我发现最好的方法是使用while(true)
:
var audioDataString = ""
val jsonReader = BufferedReader(InputStreamReader(context.resources.openRawResource(resourceName)))
val jsonBuilder = StringBuilder()
var line: String? = null
while (true) {
line = jsonReader.readLine() ?: break
jsonBuilder.append(line).append("")
}
如果您不知道,猫王运算符(?:
)会检查左侧是否为null
,如果是,则执行右侧的操作。