Scala
中的 split
函数主要有下面两种参数形式:
def split(arg0: String): Array[String]
def split(arg0: String, arg1: Int): Array[String]
其实它的第一种方式,可以认为将第二种方式的 arg1
设置为 0
形成的结果
arg0
代表的是一个正则表达式,代表根据 arg0
来分割
arg1
是对分割后的字串的个数做限定。arg1
的取值大体来说有三种方式。小于 0
、等于 0
、大于 0
一、当 arg1
大于 0
的时候
它表示原字符串被 arg0
分割后的子字串个数,也就是说原字符串最多被分割为 arg1
个字串
scala> "a-b-c".split("-", 2)
res0: Array[String] = Array(a, b-c)
scala> "a-b-c".split("-", 4)
res1: Array[String] = Array(a, b, c)
scala> "-a-b-c--".split("-", 3)
res2: Array[String] = Array("", a, b-c--)
scala> "-a-b-c--".split("-", 6)
res3: Array[String] = Array("", a, b, c, "", "")
scala> "-a-b-c--".split("-", 5)
res4: Array[String] = Array("", a, b, c, -)
scala> "-a-b-c--".split("-", 8)
res5: Array[String] = Array("", a, b, c, "", "")
二、当 arg1
等于 0
的时候
它表示原字符串被 arg0
分割后的子字串个数没有限制,也就是说原字符串能被分割为多少个,就被分割为多少个。
注意:如果被分割后的子字符串,后面包含空字符串,则默认去掉。前面的不受影响
scala> "a-b-c".split("-", 0)
res6: Array[String] = Array(a, b, c)
scala> "a-b-c---".split("-", 0)
res7: Array[String] = Array(a, b, c)
scala> "-a--b--c---".split("-", 0)
res8: Array[String] = Array("", a, "", b, "", c)
scala> "".split("-", 0)
res9: Array[String] = Array("")
三、当 arg1
小于 0
的时候
它表示原字符串被 arg0
分割后的子字串个数没有限制,也就是说原字符串能被分割为多少个,就被分割为多少个。
注意:如果被分割后的子字符串,无论前面、后面是否包含空字符串,均不受影响
scala> "a-b-c".split("-", -1)
res10: Array[String] = Array(a, b, c)
scala> "-a--b--c-".split("-", -1)
res11: Array[String] = Array("", a, "", b, "", c, "")
四、当 arg0
为 .
时,需要转义
scala> "a.b.c".split("\\.", -1)
res12: Array[String] = Array(a, b, c)
下面是没有转义的情况:
scala> "a.b.c".split(".", -1)
res13: Array[String] = Array("", "", "", "", "", "")
scala> "a.b.c".split("\.", -1)
<console>:1: error: invalid escape character
"a.b.c".split("\.", -1)