在java/kotlin中通过可重复分隔符拆分字符串

xdnvmnnf  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(458)

我用一个可重复的分隔符来分割一个字符串,并且还打算保留分隔符。

val str = "xxoooooooxxoxoxooooo"
val reg = Regex("(?<=x+)|(?=x+)")
var list = str.split(reg)
println(list)

输出为 [, x, x, ooooooo, x, x, o, x, o, x, ooooo] ,尽管我想 [xx, ooooooo, xx, o, x, o, x, ooooo]

gcuhipw9

gcuhipw91#

val str = "xxoooooooxxoxoxooooo"
val reg =  Regex("o+|x+").findAll(str).map { it.value }.toList()
println(reg)
//[xx, ooooooo, xx, o, x, o, x, ooooo]
9gm1akwq

9gm1akwq2#

实际上,使用它是不正确的 + 量词在java的regex模式的lookback中,这不是一个文档支持的特性。它不会抛出异常,因为它在内部被转换为 {1,0x7FFFFFFF} java的regex支持宽度受限的lookback模式。但是,lookbehind和lookahead中的量词没有区别,因为它们是非消耗模式,regex引擎仍然检查字符串中的每个位置是否有模式匹配。
你可以用

(?<=x)(?=o)|(?<=o)(?=x)

查看kotlin演示:

val str = "xxoooooooxxoxoxooooo"
val reg = Regex("(?<=x)(?=o)|(?<=o)(?=x)")
var list = str.split(reg)
println(list) 
// => [xx, ooooooo, xx, o, x, o, x, ooooo]

相关问题