fun main(args: Array<String>) {
val str = "Hello! How do you do? Good day!"
val reg = Regex("(?<=[!?])|(?=[!?])")
var list = str.split(reg)
println(list)
}
fun String.splitKeeping(str: String): List<String> {
return this.split(str).flatMap {listOf(it, str)}.dropLast(1).filterNot {it.isEmpty()}
}
fun String.splitKeeping(vararg strs: String): List<String> {
var res = listOf(this)
strs.forEach {str ->
res = res.flatMap {it.splitKeeping(str)}
}
return res
}
//USAGE:
"Hello! How do you do? Good day!".splitKeeping("!", "?")
4条答案
按热度按时间ca1c2owp1#
下面是Java中的一个类似问题:How to split a string, but also keep the delimiters?
使用lookahead。在Kotlin中,代码可能是这样的:
其输出为:
3df52oht2#
下面是我对这个函数的理解:
不是很快(平方复杂度),但对于相对较短的字符串效果很好。
bybem2ql3#
下面是一个扩展函数,它封装了here中讨论的代码:
o75abkj44#
创建具有简单修改的新扩展: