Как разбить строку со словами, числами и точками с запятой на карту? - PullRequest
0 голосов
/ 26 января 2019

Мне нужно разделить эту строку точкой с запятой и записать на карту ключевое слово и значение.

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

Окончательный вывод карты должен выглядеть следующим образом:

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

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Сначала разделить на ";", а затем карту:

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)

напечатает:

{Mercedes=2000, BMW=2500, Audi=2000, Porsche=1000}
0 голосов
/ 26 января 2019

Как вы специально просили решение для регулярных выражений:

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)

Это дает

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

Подробнее о Регулярное выражение в Kotlin здесь и см. Демонстрационную версию на regex101.com .

0 голосов
/ 26 января 2019
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)

Выход

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

Будьте внимательны при первом разделении"; " с пробелами.В противном случае второй сплит в пробеле " " даст вам другой результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...