如何在Kotlin中使用while循环迭代BufferedReader并将其追加到StringBuilder?

时间:2018-09-09 12:51:53

标签: android kotlin

这是我从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中正确执行此操作?

谢谢。

2 个答案:

答案 0 :(得分:6)

在Kotlin标准库中有many different extensions,您可以在此处用于输入流,文件,阅读器等。对于这种用例,Reader.forEachLine将是最简单的使用方式:

jsonReader.forEachLine { line ->
    jsonBuilder.append(line)
}

这使您可以逐行处理Reader,并在迭代结束后自动关闭Reader

您可能还想看看readLineslineSequenceuseLines,它们可以在更复杂的情况下为您提供帮助。

答案 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,如果是,则执行右侧的操作。