我怎样才能简化这个代码在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() 

如果你真的想一路走,你也可以跳过linha1linha2任务,只要这样做:

 for (line in File("voos.txt").readLines()) { /*...*/ } 

但除了消除不必要的variables之外,我不能真正看到任何其他简化的机会。 (但这是来自一个相对缺乏经验的程序员,所以…)

Marko Topolnik的答案更多的是你要找的,但我仍然建议消除不必要的variables来简化。