首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin:计算字符串在字符串中出现的次数

Kotlin:计算字符串在字符串中出现的次数
EN

Stack Overflow用户
提问于 2020-05-12 18:41:53
回答 4查看 741关注 0票数 1
代码语言:javascript
复制
val string = "5 kg rice 2 kg wheat 3 kg Soya"

是否有更高阶的函数来计算上述字符串中的字符串"kg“?

EN

回答 4

Stack Overflow用户

发布于 2020-05-12 20:51:51

代码语言:javascript
复制
fun main() {
    val s = "5 kg rice 2 kg wheat 3 kg Soya"
    val c = "\\bkg\\b".toRegex().findAll(s).count()
    println(c)
}
票数 5
EN

Stack Overflow用户

发布于 2020-05-12 19:46:33

这是可行的:

代码语言:javascript
复制
println("5 kg rice 2 kg wheat 3 kg Soya".windowed(2, 1).count { it == "kg" })

但是如果你只想要出现“kg ",你可以使用:

代码语言:javascript
复制
println("5 kg rice 2 kg wheat 3 kg Soyakg".windowed(4, 1).count { it == " kg " })

我相信它也可以工作:

代码语言:javascript
复制
println("5 kg rice 2 kg wheat 3 kg Soya".splitToSequence(" kg ").count() - 1)

正如我之前所说的,拆分字符串或检查窗口字符串的方式将取决于您认为有效的发生类型。

票数 4
EN

Stack Overflow用户

发布于 2020-05-12 19:04:41

标准库中似乎没有计算子字符串的函数。但是您可以很容易地编写一个使用indexOf(element, startIndex)函数的扩展函数:

代码语言:javascript
复制
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
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61749642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档