我怎样才能简化这个代码在kotlin?
我正在做一个程序,我需要从两个.txt
文件读取输入。 但是我知道有一个比复制代码更简单的方法。 我已经写了这个:
import java.io.File fun chamadas (args: Array) { 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
文件是这种types的:
voos.txt
– > :::
reservas.txt
– > :::
日期不会是DD/MM/YYYY
格式,只能是1-31的数字。 任何想法,我应该如何简化代码?
你可以使用如下的方法:
fun processFile(path: String) { File(path).forEachLine { val (flightNumber, origin, destination, date) = it.split(':') println("$flightNumber $origin $destination $date") } }
这使用了你的代码没有的几个Kotlin特性:
- 范围化的资源管理与逐行处理(
forEachLine
) - 解构作业
您可以尝试放弃line.split(':')
的额外variables,并简单地连接一切。
for (line in linha1) { val flightNumber = line.split(':')[0] val origin = line.split(':')[1] val destination = line.split(':')[2] val date = line.split(':')[3] }
另外,不要为文件名创建variables,而是直接将其放入。
val linha1 = File("voos.txt").readLines()
如果你真的想一路走,你也可以跳过linha1
和linha2
任务,只要这样做:
for (line in File("voos.txt").readLines()) { /*...*/ }
但除了消除不必要的variables之外,我不能真正看到任何其他简化的机会。 (但这是来自一个相对缺乏经验的程序员,所以…)
Marko Topolnik的答案更多的是你要找的,但我仍然建议消除不必要的variables来简化。