首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin:计数“`String`”中“`charArray`”的出现

Kotlin:计数“`String`”中“`charArray`”的出现
EN

Stack Overflow用户
提问于 2018-04-15 20:08:14
回答 6查看 27.4K关注 0票数 20

我有两根线

代码语言:javascript
复制
val string1 = "Hello"
val string2 = "Hello world"

我必须计算string1string2 in Kotlin中每封信的存在

到目前为止,我已经编写了这么多代码并坚持使用regex。

代码语言:javascript
复制
val string1_array = string1.toCharArray()
val pattern = Regex("") // Regex pattern here
val matcher = string2

val count = pattern.findAll(matcher).count()

搜索charArray的合适的Regex模式应该是什么?在科特林有什么更好的方法吗

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-04-15 20:18:41

你可以使用下面的高阶方法,

代码语言:javascript
复制
val count = string2.count{ string1.contains(it) }
print(count)
票数 14
EN

Stack Overflow用户

发布于 2018-04-16 09:44:38

下面是一些可以使用的String扩展函数

任何焦炭的出现

使用fold扩展函数:

代码语言:javascript
复制
val string1 = "Hello"
val string2 = "Hello world Hello"

print(
     string2.fold(0) {
         sum: Int, c: Char ->
         if (string1.contains(c))
             sum + 1
         else
             sum
     }   
) 

或者用sumBy更短

代码语言:javascript
复制
string2.sumBy { 
    if (string1.contains(it))
        1
    else
        0
}

甚至更短:

代码语言:javascript
复制
string2.count { string1.contains(it) }

或最短的:

代码语言:javascript
复制
string2.count { it in string1 }

每个焦炭的个别出现

使用forEachMutableMap

代码语言:javascript
复制
val charsMap = mutableMapOf<Char, Int>()

string2.forEach{
    charsMap[it] = charsMap.getOrDefault(it, 0) + 1
}

print(charsMap)

整个string1的发生

使用windowed扩展函数:

代码语言:javascript
复制
string2.windowed(string1.length){
    if (it.equals(string1))
        1
    else
        0
}.sum()

您可以在String中浏览更多 stblib page扩展函数。

票数 19
EN

Stack Overflow用户

发布于 2018-04-16 20:58:09

只需使用Kotlin的集合函数

代码语言:javascript
复制
val occurrences = string2.filter{ it in string1}
                        .groupingBy { it }
                        .eachCount()
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49846295

复制
相关文章

相似问题

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