在 kotlin 中循环

Looping in kotlin in line

我在使用 kotlin 进行循环时遇到了一些麻烦

我有 json 如下所示:

{
idEvent: "584412",
strEvent: "Huesca vs Girona",
strHomeYellowCards: "28':Ezequiel Avila;34':Juan Nunez Aguilera;45':Damian Musto;88':David Ferreiro;"
}

并且在我在 android 工作室中生成后,我希望行 strHomeYellowCards 只在一个 TextView:

中变成如下所示
Ezequiel Avila 28'
Juan Nunez Aguilera 34'
Damian Musto 45' 
David Ferreiro 88'

这些是我实现它的代码

fun formatNumPlayer(players: String?): String {
        if (players.isNullOrBlank()) {
            return players.orEmpty()
        } else {
            val entered = players!!.replace(";", "\n")
            val splitted = entered!!.split(":")
            var result: String? = null
            for (i in splitted.indices) {
                result += "${splitted[1]}" + " " + "${splitted[0]}" + "\n"
            }
            return result!!
        }
    }

但是结果出乎我的意料,那么真实的代码如何呢?

首先,您在问题中提供的 JSON 格式不正确。应该更像这样:

strHomeYellowCards: [
  {
    "minute": "28'",
    "player": "Ezequiel Avila"
  },
  {
    "minute": "34'",
    "player": "Juan Nunez Aguilera"
  }, ..and so on
]

然后您可以继续解析它。要解析 JSON 对象,您应该使用像 GSON.

这样的库

为您的 YellowCard 创建 POJO 对象:

data class YellowCard(
    @SerializedName("minute") val minute: String, 
    @SerializedName("player") val player: String)

然后解析它:

val gson = Gson()
val yellowCards: List<YellowCard> = gson.fromJson(json, new TypeToken<List<YellowCard>>(){}.getType())

提供的 JSON 格式不正确 JSON。所以我假设您刚刚在此处粘贴了 key:value 对。

在这种情况下,将值作为字符串并对其进行处理将是实现您的目标的最简单方法。

// Assume bulkText is the value of key `strHomeYellowCards`
val bulkText = "28':Ezequiel Avila;34':Juan Nunez Aguilera;45':Damian Musto;88':David Ferreiro;"

var result = ""

bulkText.split(';').forEach{
    result += it.split(':').asReversed().reduce{ sum, element -> sum + ' ' + element } + '\n'
}

// result should be your desired output
println(result)

他不能使用 Gson,因为 minute:player 对由 ; 分隔 在有效的 json 中,这必须是 ,

如果你真的想手动解析这个,试试这个:

fun formatNumPlayer(players: String?): String {
    var result = ""
    players?.let {
        it.split(";").forEach { pair ->
            val tmp = pair.split(":")
            result += tmp[1] + " " + tmp[0] + "\n"
        }
        return result
    }

    return result
}