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

问题描述 投票:1回答:1

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

文本文件:

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
kotlin
1个回答
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())的功能。

© www.soinside.com 2019 - 2024. All rights reserved.