在 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]
我们如何在 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]