Цикл в котлин в очереди - PullRequest
0 голосов
/ 04 октября 2018

У меня возникли проблемы с использованием 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!!
        }
    }

, но результат не соответствует моим ожиданиям, так как истинный код об этом

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Предоставленный 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)
0 голосов
/ 04 октября 2018

Он не может использовать 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
}
0 голосов
/ 04 октября 2018

Прежде всего, JSON, который вы указали в своем вопросе, не имеет правильного формата.Это должно быть примерно так:

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

И тогда вы можете приступить к его разбору.Для разбора объекта JSON вы должны использовать библиотеку типа GSON .

Создать объект POJO для вашей YellowCard:

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())
...