如何在Kotlin中从指定文本中提取特定字符串,获取DriverId与Amount的值
Kotlin 提取字符串中指定字段的实现方案
方法1:直接分割(适合格式完全固定的场景)
实现逻辑最简单,性能最优,前提是你能确保输入字符串永远是DriverId=xxx,Amount=xxx的固定格式,不会缺字段、不会变顺序。
val scanStr = "DriverId=60cb1daa20056c0c92ebe457,Amount=10.0" // 按逗号拆分出两个键值对 val parts = scanStr.split(",") val driverId = parts[0].split("=")[1] val amount = parts[1].split("=")[1].toDouble() // 需要数值类型的话直接转Double
方法2:转Map存储(适合字段可扩展、顺序可能变化的场景)
如果后续可能新增其他字段,或者字段顺序不固定,可以先把整个字符串转成键值对Map,需要什么字段直接从Map取即可。
val scanStr = "DriverId=60cb1daa20056c0c92ebe457,Amount=10.0" val resultMap = scanStr.split(",") .associate { pair -> val (key, value) = pair.split("=") key to value } // 按需取值,不存在的key会返回null,避免数组越界崩溃 val driverId = resultMap["DriverId"] val amount = resultMap["Amount"]?.toDouble()
方法3:正则匹配(适合输入可能包含冗余内容的场景)
如果输入字符串前后可能有其他无关字符,用正则分组匹配可以精准提取目标值,容错性最高。
val scanStr = "DriverId=60cb1daa20056c0c92ebe457,Amount=10.0" // 正则中用两个分组分别捕获DriverId和Amount的值 val regex = """DriverId=([a-f0-9]+),Amount=(\d+\.\d+)""".toRegex() val matchResult = regex.find(scanStr) matchResult?.let { val driverId = it.groupValues[1] val amount = it.groupValues[2].toDouble() // 后续业务逻辑 } ?: run { // 格式不匹配的异常处理逻辑 }
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

