请参阅下面的示例。我创建一个多行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:)
感谢。
答案 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:
//")