Почему Kotlin не напечатает строку, которую я выбрал из файла .txt, если это не последняя строка? - PullRequest
1 голос
/ 30 октября 2019

Я использую, чтобы открыть текстовый файл, случайным образом выбрать строку и отформатировать строку, которая содержит случайно выбранную строку. Затем строка выводится на консоль, но по какой-то причине она не будет работать, если случайно не будет выбрана последняя строка файла.

Текстовый файл:

Neversummer
Abelhaven
Phandoril
Tampa
Sanortih
Trell
Zan'tro
Hermi Hermi
Curlthistle Forest

Код:

import java.io.File

fun main() {
    var string = File("data/towns.txt")
        .readText()
        .split("\n")
        .shuffled()
        .first()
    println("$string has printed")
}

Вывод, когда выбрана последняя строка:

Curlthistle Forest has printed

Вывод, если выбрана любая другая строка:

 has printed

1 Ответ

2 голосов
/ 30 октября 2019

Как предположил Дюха в разделе комментариев, это действительно проблема, специфичная для платформы. Я предпочитаю решения, которые он предоставил, используя readLines(), поскольку вы можете объединить два вызова функций в один.

Однако, если вам когда-либо понадобится проверять разделитель строк независимым от платформы способом, вы должны использоватьвстроенное свойство System.lineSeparator() (начиная с Java 7).


import java.io.File

fun main() {
    var string = File("data/towns.txt")
        .readText()
        .split(System.lineSeparator())
        .shuffled()
        .first()
    println("$string has printed")
}
...

Тем не менее, я рекомендую использовать readLines(), так как он упаковывает функциональные возможности .readText() и .split(System.lineSeparator()).

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