说我有一个字符串
"Hello! How do you do? Good day!"
我想分割它,我的分隔符是:?并且!
使用"split"函数,结果将是:
`[Hello, How do you do, Good day]`
Run Code Online (Sandbox Code Playgroud)
但是,我希望它是:
`[Hello, !, How do you do, ?, Good day, !]`
Run Code Online (Sandbox Code Playgroud)
这是Java中的一个类似问题:如何拆分字符串,还要保留分隔符?
使用前瞻.在Kotlin中,代码可能是这样的:
fun main(args: Array<String>) {
val str = "Hello! How do you do? Good day!"
val reg = Regex("(?<=[!?])|(?=[!?])")
var list = str.split(reg)
println(list)
}
Run Code Online (Sandbox Code Playgroud)
这个输出是:
[Hello, !, How do you do, ?, Good day, !]
Run Code Online (Sandbox Code Playgroud)
这是我的此类函数的版本:
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("!", "?")
Run Code Online (Sandbox Code Playgroud)
它不是很快(平方复杂度),但对于相对较短的字符串效果很好。
| 归档时间: |
|
| 查看次数: |
7155 次 |
| 最近记录: |