我正在做一个程序,我需要读取两个.txt
文件的输入。但我知道有一种比复制代码更简单的方法。我已写过:
import java.io.File
fun chamadas (args: Array<String>) {
val ficheiro1 = "voos.txt"
val ficheiro2 = "reservas.txt"
val linha1 = File(ficheiro1).readLines()
for (line in linha1) {
val parts = line.split(':')
val flightNumber = parts[0]
val origin = parts[1]
val destination = parts[2]
val date = parts[3]
}
val linha2 = File(ficheiro2).readLines()
for (line in linha2) {
val parts = line.split(':')
val id = parts[0]
val nameSurname = parts[1]
val flightNumber = parts[2]
val date = parts[3]
}
}
.txt
个文件属于这种类型:
voos.txt
- &gt; <FlightNumber>:<Origin>:<Destination>:<Date>
reservas.txt
- &gt; <ID>:<Name and Surname>:<FlightNumber>:<Date>
日期不会是DD/MM/YYYY
格式,只会是1-31之间的数字。关于如何简化代码的任何想法?
答案 0 :(得分:1)
您可以使用以下方法:
fun processFile(path: String) {
File(path).forEachLine {
val (flightNumber, origin, destination, date) = it.split(':')
println("$flightNumber $origin $destination $date")
}
}
这使用了您的代码不具备的几个Kotlin功能:
forEachLine
)答案 1 :(得分:0)
您可以尝试放弃line.split(':')
的额外变量,只需将所有内容联合起来。
for (line in linha1) {
val flightNumber = line.split(':')[0]
val origin = line.split(':')[1]
val destination = line.split(':')[2]
val date = line.split(':')[3]
}
此外,您可以直接将其放入文件名中,而不是为文件名创建变量。
val linha1 = File("voos.txt").readLines()
如果你真的想要一路走下去,你也可以跳过linha1
和linha2
作业并执行此操作:
for (line in File("voos.txt").readLines()) { /*...*/ }
但除了消除不必要的变量之外,我无法真正看到任何其他简化机会。 (但这是来自一个相对缺乏经验的程序员,所以......)
Marko Topolnik的答案更多是你正在寻找的,但我仍然建议消除不必要的变量来简化。