我有两根线
val string1 = "Hello"
val string2 = "Hello world"我必须计算string1在string2 in Kotlin中每封信的存在
到目前为止,我已经编写了这么多代码并坚持使用regex。
val string1_array = string1.toCharArray()
val pattern = Regex("") // Regex pattern here
val matcher = string2
val count = pattern.findAll(matcher).count()搜索charArray的合适的Regex模式应该是什么?在科特林有什么更好的方法吗
发布于 2018-04-15 20:18:41
你可以使用下面的高阶方法,
val count = string2.count{ string1.contains(it) }
print(count)发布于 2018-04-16 09:44:38
下面是一些可以使用的String扩展函数
任何焦炭的出现
使用fold扩展函数:
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更短
string2.sumBy {
if (string1.contains(it))
1
else
0
}甚至更短:
string2.count { string1.contains(it) }或最短的:
string2.count { it in string1 }每个焦炭的个别出现
val charsMap = mutableMapOf<Char, Int>()
string2.forEach{
charsMap[it] = charsMap.getOrDefault(it, 0) + 1
}
print(charsMap)整个string1的发生
使用windowed扩展函数:
string2.windowed(string1.length){
if (it.equals(string1))
1
else
0
}.sum()您可以在String中浏览更多 stblib page扩展函数。
发布于 2018-04-16 20:58:09
只需使用Kotlin的集合函数
val occurrences = string2.filter{ it in string1}
.groupingBy { it }
.eachCount()https://stackoverflow.com/questions/49846295
复制相似问题