在 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
}
我在使用 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
}