如何分割一个字符串,并在Kotlin中的分割部分之间植入分隔符?
说我有一个字符串
"Hello! How do you do? Good day!"
我想分割它,我的分隔符是: ?
和!
使用“分割”功能的结果将是:
`[Hello, How do you do, Good day]`
但是,我希望它是:
`[Hello, !, How do you do, ?, Good day, !]`
下面是Java中的一个类似的问题: 如何分割一个字符串,还要保留分隔符?
使用lookahead。 在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) }
这是我这样一个功能的版本:
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("!", "?")
它不是非常快(方形复杂度),但对于相对较短的字符串很适用。