如何用单词,数字和分号分割字符串以映射?

时间:2019-01-26 16:34:36

标签: regex kotlin

我需要将这个字符串用分号分隔,并使用关键字和值编号写入地图。

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

地图的最终输出应如下所示:

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

3 个答案:

答案 0 :(得分:3)

先除以";",然后映射:

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}

答案 1 :(得分:2)

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}

请注意在"; "处使用空格进行第一次拆分。否则,在空白处" "进行的第二次拆分将为您提供不同的结果。

答案 2 :(得分:1)

正如您特别要求的正则表达式解决方案:

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}

详细了解Regex in Kotlin heresee a demo on regex101.com