我是Scala的新手。
val str = "Hi My name (is XXX)"
我尝试使用str.split("\\s")
拆分并创建字符串数组,如下所示:
0:嗨
1:我的
2:名字
3 :(是
4:XXX)
我想得到 0:嗨 1:我的 2:名字 3 :(是XXX) 在Scala中有没有快速的方法呢
答案 0 :(得分:1)
您也可以使用以下正则表达式,但它不适用于嵌套的parens。
(\([^)]+\)|\S+)
在控制台中测试:
@ """(\([^)]+\)|\S+)""".r.findAllIn("Hi My name (is XXX)").toList
res8: List[String] = List("Hi", "My", "name", "(is XXX)")
@ """(\([^)]+\)|\S+)""".r.findAllIn("(A B) C D (E F G) H").toList
res9: List[String] = List("(A B)", "C", "D", "(E F G)", "H")
@ """(\([^)]+\)|\S+)""".r.findAllIn("Z (A B) C D (E F G) H").toList
res10: List[String] = List("Z", "(A B)", "C", "D", "(E F G)", "H")
答案 1 :(得分:0)
这将在空格上分开,但始终保持括号之间的内容。
def splitWithParens(s: String) =
s.split("[()]").grouped(2).flatMap {
case Array(a,b) => a.split("\\s+").filter(_.nonEmpty) :+ s"($b)"
case Array(a) => a.split("\\s+").filter(_.nonEmpty)
}.toVector
splitWithParens("Hi My name (is XXX)") // Vector(Hi, My, name, (is XXX))
splitWithParens("(A B) C D (E F G) H") // Vector((A B), C, D, (E F G), H)
splitWithParens("Z (A B) C D (E F G) H") // Vector(Z, (A B), C, D, (E F G), H)