Kotlin中如何在两个字符之间分割文本提取指定字段值
Kotlin 提取指定字段值的实现方法
示例输入字符串:
base_id:94, user_id: 320903, is_Active=1
以下提供两种常用实现方式,可根据实际场景选择:
方案1:正则匹配(推荐用于键值对提取场景)
直接匹配user_id:后到分隔符前的目标值,代码简洁且容错性更高:
val input = "base_id:94, user_id: 320903, is_Active=1" // 正则说明:匹配user_id:后任意个空格,再捕获连续数字 val userIdRegex = Regex("user_id:\\s*(\\d+)") val userId = userIdRegex.find(input)?.groupValues?.get(1) println(userId) // 输出:320903
方案2:字符串分割(通用双标记间文本提取)
如果你需要通用的「两个字符/标记之间取内容」的能力,可以用如下扩展函数实现:
/** * 提取字符串中[start]和[end]两个标记之间的文本 * @param start 起始标记 * @param end 结束标记 * @param ignoreCase 是否忽略大小写,默认不忽略 * @return 匹配到的文本,匹配失败返回null */ fun String.substringBetween(start: String, end: String, ignoreCase: Boolean = false): String? { // 查找起始标记位置 val startIndex = indexOf(start, ignoreCase = ignoreCase).takeIf { it != -1 } ?: return null val contentStart = startIndex + start.length // 从内容起始位置开始查找结束标记位置 val endIndex = indexOf(end, startIndex = contentStart, ignoreCase = ignoreCase).takeIf { it != -1 } ?: return null // 截取内容并去除前后空格 return substring(contentStart, endIndex).trim() } // 调用示例 val input = "base_id:94, user_id: 320903, is_Active=1" val userId = input.substringBetween("user_id:", ",") println(userId) // 输出:320903
注意:如果输入字符串格式有调整,对应修改分隔标记或者正则规则即可适配
内容的提问来源于stack exchange,提问作者Mehmet Gür
相关产品推荐
相关产品推荐

