除非最后一行,否则Kotlin为什么不打印从.txt文件中选择的字符串?

时间:2019-10-30 01:13:12

标签: kotlin

我用来打开文本文件,随机选择一行,并格式化包含随机选择的行的字符串。然后将字符串打印到控制台,但是由于某种原因,除非随机选择文件的最后一行,否则它将无法工作。

文本文件:

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 个答案:

答案 0 :(得分:2)

正如dyukha在评论部分中建议的那样,确实确实是特定于平台的问题。我更喜欢他使用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())的功能。