我在使用kotlin进行循环时遇到了一些麻烦
我有json,如下所示:
{
idEvent: "584412",
strEvent: "Huesca vs Girona",
strHomeYellowCards: "28':Ezequiel Avila;34':Juan Nunez Aguilera;45':Damian Musto;88':David Ferreiro;"
}
并且在android studio中生成后,我希望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!!
}
}
但是结果出乎我的意料,所以关于它的真实代码如何?
答案 0 :(得分:1)
提供的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)
答案 1 :(得分:0)
首先,您在问题中提供的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())
答案 2 :(得分:0)
他不能使用Gson,因为分钟:玩家对之间用;隔开。 在有效的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
}