如何在Kotlin中统计字符串替换次数?
我的实现方案与问题总结
我之前是这么完成这个需求的:
val a = listOf("foo bar", "foo bar baz", "bar", "bar") val b = a.count { it.contains("bar") } val aa = a.map { it.replace("bar", "baz") } var c = aa.count { it.contains("bar") } println("replaced: ${b-c}")
不过这种实现的效率确实不高——我们前后一共遍历了三次列表:第一次统计包含"bar"的元素数量,第二次把所有"bar"替换成"baz"生成新列表,第三次再统计新列表里还包含"bar"的元素数量。当列表规模比较大的时候,这种多次遍历的开销会很明显。
另外顺带提个小细节:在Java/Kotlin里用正则匹配空白字符确实容易踩坑。比如:
- 要匹配所有类型的空白字符(空格、制表符、换行符等),得用
\\s(字符串里要写双反斜杠,不然会被当成转义字符解析); - 要是只需要匹配普通空格,直接写空格就行;
- 匹配连续的空白字符则用
\\s+。
刚开始用的时候很容易在转义上出错,这点得格外注意。
内容的提问来源于stack exchange,提问作者sfy
相关产品推荐
相关产品推荐

