如何在kotlin中简化此代码?

时间:2018-01-19 00:01:08

标签: intellij-idea kotlin

我正在做一个程序,我需要读取两个.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之间的数字。关于如何简化代码的任何想法?

2 个答案:

答案 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()

如果你真的想要一路走下去,你也可以跳过linha1linha2作业并执行此操作:

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

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

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