在Scala中,我有一个
形式的字符串val str = "[ab][bc][cd][dx][42]"
Scala中最有效的方法是什么,正则表达式利用或以其他方式将该字符串拆分为Seq[String]
形式:
("ab","bc","cd","dx","42")
谢谢。
答案 0 :(得分:6)
你可以试试这个:
val str = "[ab][bc][cd][dx][42]"
val res = str.drop(1).sliding(2, 4).toList
println(res) // List(ab, bc, cd, dx, 42)
val str2 = "[ab]"
val res2 = str2.drop(1).sliding(2, 4).toList
println(res2) // List(ab)
val str3 = ""
val res3 = str3.drop(1).sliding(2, 4).toList
println(res3) // List()
答案 1 :(得分:4)
你可以尝试:
str.split("(\\]\\[)|(\\[)|(\\])").filterNot(_.isEmpty)
主要使用组(][, ], [)
进行分隔和修剪数组。
答案 2 :(得分:2)
您可以使用此正则表达式:
(?<=\[)([^]]+)(?=\])
<强>代码:强>
scala> val re = "(?<=\\[)([^]]+)(?=\\])".r
re: scala.util.matching.Regex = (?<=\[)([^]]+)(?=\])
scala> for(m <- re.findAllIn("[ab][bc][cd][dx][42]")) println(m)
ab
bc
cd
dx
42
答案 3 :(得分:1)
假设][
是任意两个连续项之间的分隔符,请考虑
str.drop(1).dropRight(1).split("\\]\\[")
递送
Array("ab", "bc", "cd", "dx", "42")
<强>更新强>
一种更为通用的方法,我们定义String
分隔符,
implicit class Spl(val str: String) extends AnyVal {
def regSplit(leftDel: String, rightDel: String) =
str.stripPrefix(leftDel).stripSuffix(rightDel).split(rightDel+leftDel)
}
因此
str.regSplit("\\[","\\]")
res: Array[String] = Array([ab, bc, cd, dx, 42])
答案 4 :(得分:0)