在 2 个基于字符的索引之间拆分字符串

split string between 2 char based index

我们如何在 Kotlin 中将文本拆分为两个字符?

示例字符串:

base_id:94, user_id: 320903, is_Active=1

我只想得到 user_id 所以“320903”。但是我做不到。

获取它的一种方法是使用正则表达式,您可以自定义它以涵盖 base_id 和 is_Active

val pattern = Pattern.compile("user_id: (?<id>[0-9]+)")
val matcher = pattern.matcher(text)
if (matcher.find()) {
    val group = matcher.group("id").trim()
    println(group)
}

输出将是:320903

或者你可以只用拆分来做,你会得到相同的结果

val items = text.split(",")
val userId = items[1].split(":")[1].trim()
println(userId)

这将与您的示例一起正常工作,但请确保,但对于其他情况,您可能需要对其进行自定义或为我们提供许多示例来涵盖它们

您可以使用一个支持可选空格和 : 或 =

的函数来处理 3 个值
fun getValueByTagName(text : String, tag : String) : String {
    val pattern = Pattern.compile("$tag[:=][ ]*(?<id>[0-9]+)")
    val matcher = pattern.matcher(text)
    return if (matcher.find())
        matcher.group("id").trim()
    else ""
}

使用它

println(getValueByTagName(text, "base_id"))      // 94
println(getValueByTagName(text, "user_id"))      // 320903
println(getValueByTagName(text, "is_Active"))    // 1

另一个解决方案:

方法 1:如果您的字符串与您在示例中显示的格式完全相同。

val indexOfUserId = s.indexOf("user_id") // find index of the substring "user_id"
val end = s.indexOf(',', indexOfUserId) // find index of ',' after user_id
val userId s.substring(indexOfUserId + 9, end) // take the substring assuming that userId starts exactly 9 characters after the "u" in "user_id"

方法 2:如果您的格式可以变化(空格和符号)。还假设 user_id 始终是一个数字。

val indexOfUserId = s.indexOf("user_id")
val start = s.findAnyOf(List(10) { "$it" }, indexOfUserId)!!.first // find the first digit after "user_id"
val userId = s.substring(start).takeWhile { it.isDigit() } // start from the first digit and continue as long as you are getting digits

这里,List(10) { "$it" }只是字符串格式的所有数字的列表,findAnyOf:

Finds the first occurrence of any of the specified [strings] in this char sequence, starting from the specified [startIndex]

Try it yourself