Je dois diviser cette chaîne par un point-virgule et écrire sur la carte avec le mot clé et le numéro de valeur.

"Mercedes 2000; BMW 2500; Audi 2000; Porsche 1000"

La sortie finale de la carte devrait ressembler à:

{Mercedes=2000, BMW=2500, Audi=2000, Porsche=1000}
2
A.Rost 26 janv. 2019 à 19:34

3 réponses

Meilleure réponse

Commencer par ";", puis mapper:

val str = "Mercedes 2000; BMW 2500; Audi 2000; Porsche 1000"
val map = str
        .split(";")
        .map { it.trim().substringBefore(" ") to it.trim().substringAfter(" ") }
        .toMap()
println(map)

Imprimera:

{Mercedes=2000, BMW=2500, Audi=2000, Porsche=1000}
4
forpas 26 janv. 2019 à 16:50
val input = "Mercedes 2000; BMW 2500; Audi 2000; Porsche 1000"

val map = HashMap<String, String>()
val keyValue = input.split("; ") // split the input into key-value items
for (item in keyValue) {
    val keyValueSplit = item.split(" ")// split the key and the value
    val key = keyValueSplit[0]
    val value = keyValueSplit[1]
    map[key] = value // insert into result map
}
println(map)

Production

{Audi = 2000, Porsche = 1000, Mercedes = 2000, BMW = 2500}

Faites attention de faire la première division en "; " avec un espace. Sinon, la deuxième division à l'espace blanc " " vous donnera un résultat différent.

2
Simulant 26 janv. 2019 à 16:47

Comme vous avez spécifiquement demandé une solution regex:

val map = HashMap<String, String>()
val regex = """(\S+)\s+(\d+)(?:;\s+)?""".toRegex()
for (m in regex.findAll("Mercedes 2000; BMW 2500; Audi 2000; Porsche 1000"))
    map[m.groupValues[1]] = m.groupValues[2]
println(map)

Cela donne

{Audi=2000, Porsche=1000, Mercedes=2000, BMW=2500}

En savoir plus sur Regex in Kotlin ici et voir une démo sur regex101.com .

1
Jan 27 janv. 2019 à 10:04