我用来打开文本文件,随机选择一行,并格式化包含随机选择的行的字符串。然后将字符串打印到控制台,但是由于某种原因,除非随机选择文件的最后一行,否则它将无法工作。
文本文件:
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
答案 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())
的功能。