斯卡拉。拆分行正则表达式返回意外的空字符串

时间:2017-05-09 21:47:59

标签: regex scala

请参阅下面的示例。我创建一个多行String,然后尝试拆分它。除第一行外,它工作正常。默认情况下,split方法不会返回分隔符。所以,我想知道它返回""的行的开头有什么特别之处。以及如何更新正则表达式以避免它。

scala> val Shakespear =
     |     """
     |       |To be,
     |       | or not
     |       |to be:
     |     """.stripMargin
Shakespear: String =
"
To be,
 or not
to be:
    "

scala> Shakespear.split("""[\s]+""")
res3: Array[String] = Array("", To, be,, or, not, to, be:)

感谢。

1 个答案:

答案 0 :(得分:3)

而不是更新正则表达式,如何trim两端的空格,然后拆分:

Shakespear.trim.split("\\s+")
// res22: Array[String] = Array(To, be,, or, not, to, be:)

至于为什么你有一个空字符串,你在字符串的开头有一个新的行字符,它也被\\s捕获,并且在它上面拆分会给你一个空字符串,因为前面没有任何字符串分界符。

以下是您的字符串的原始表示形式(从here借来的转义符):

def escape(raw: String): String = {
    import scala.reflect.runtime.universe._
    Literal(Constant(raw)).toString
}

escape(Shakespear)
// res24: String = "\nTo be,\n or not\nto be:\n          "

如果您不想拆分换行符,请使用" "代替:

Shakespear.split(" ")

//res26: Array[String] =
//Array("
//To", "be,
//", or, not
//to, "be:
//")