I need to split this string by a semicolon and write to the map with the key word and value number.
"Mercedes 2000; BMW 2500; Audi 2000; Porsche 1000"
Final output of map should looks like:
{Mercedes=2000, BMW=2500, Audi=2000, Porsche=1000}
First split by ";"
and then map:
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)
will print:
{Mercedes=2000, BMW=2500, Audi=2000, Porsche=1000}
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)
Output
{Audi=2000, Porsche=1000, Mercedes=2000, BMW=2500}
Be careful to do the first split at "; "
with a whitespace. Otherwise the second split at the whitespace" "
will give you a different result.
As you have specifically asked for a regex solution:
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)
This yields
{Audi=2000, Porsche=1000, Mercedes=2000, BMW=2500}
Read more about Regex in Kotlin here and see a demo on regex101.com.