Как я могу использовать цикл while в Kotlin для перебора BufferedReader и добавления в StringBuilder? - PullRequest
0 голосов
/ 09 сентября 2018

Вот код, который я перенес из 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 голосов
/ 09 сентября 2018

В стандартной библиотеке Kotlin есть много различных расширений , которые вы можете использовать здесь для входных потоков, файлов, программ чтения и т. Д. Для этого варианта использования Reader.forEachLine будет самое простое в использовании:

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

Это позволяет обрабатывать Reader построчно и автоматически закрывает Reader, когда итерация завершена.

Возможно, вы захотите взглянуть на readLines, lineSequence и useLines, которые могут помочь вам в более сложных ситуациях. .

0 голосов
/ 09 сентября 2018

К сожалению, я нашел лучший способ сделать это с 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("")
        }

На всякий случай, если вы не знаете, оператор elvis (?:) проверяет, есть ли слева null, и выполняет действие справа, если оно есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...