val string = "5 kg rice 2 kg wheat 3 kg Soya"
在上述字符串中,有没有任何高阶函数可以计算字符串“kg”的数量?
val string = "5 kg rice 2 kg wheat 3 kg Soya"
val count = s.split("kg").size - 1
在使用 split 扩展函数将字符串分割后,减1的大小即为出现次数。
您可以在 Kotlin Playground 上测试此解决方案: https://pl.kotl.in/y6Sciwgzk
fun main() {
val s = "5 kg rice 2 kg wheat 3 kg Soya"
val c = "\\bkg\\b".toRegex().findAll(s).count()
println(c)
}
标准库中似乎没有计算子字符串数量的函数。但是您可以轻松编写一个扩展函数,该函数使用indexOf(element, startIndex)
函数:
fun main() {
val string = "5 kg rice 2 kg wheat 3 kg Soya"
println(string.count("kg"))
}
fun String.count(element: String): Int {
var count = 0
// Check if the string contains the element at all
var lastIndex = indexOf(element, 0)
while (lastIndex >= 0) {
count += 1
// Find the next occurence
lastIndex = indexOf(element, lastIndex + 1)
}
return count
}
这个有效:
println("5 kg rice 2 kg wheat 3 kg Soya".windowed(2, 1).count { it == "kg" })
但如果您仅需要“kg”的出现次数,可以使用:
println("5 kg rice 2 kg wheat 3 kg Soyakg".windowed(4, 1).count { it == " kg " })
我相信这也可以行:
println("5 kg rice 2 kg wheat 3 kg Soya".splitToSequence(" kg ").count() - 1)