Scala中的split函数使用

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)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是Scala实现归并排序的示例代码: ```scala def mergeSort[A](list: List[A])(implicit ord: Ordering[A]): List[A] = { def merge(left: List[A], right: List[A]): List[A] = (left, right) match { case (Nil, right) => right case (left, Nil) => left case (leftHead :: leftTail, rightHead :: rightTail) => if (ord.lt(leftHead, rightHead)) leftHead :: merge(leftTail, right) else rightHead :: merge(left, rightTail) } val n = list.length / 2 if (n == 0) list else { val (left, right) = list.splitAt(n) merge(mergeSort(left), mergeSort(right)) } } ``` 这段代码定义了一个`mergeSort`函数,它接受一个`List[A]`类型的列表和一个`Ordering[A]`类型的隐式参数,返回一个按照升序排序的新列表。 函数内部定义了一个`merge`函数,它接受两个列表作为参数,返回一个合并后的有序列表。在`merge`函数使用模式匹配对列表进行判断,如果其一个列表为空,直接返回剩下的非空列表;否则,比较两个列表的头部元素,选择较小的一个放到结果列表,并递归调用`merge`函数处理剩下的元素。 在`mergeSort`函数,首先计算出列表长度的一半`n`,如果`n`为0,直接返回原列表;否则,将原列表拆分成两个列表`left`和`right`,递归调用`mergeSort`函数对`left`和`right`进行排序,并将排序后的结果传递给`merge`函数进行合并。 你可以使用这段代码进行测试,看看输出结果是否符合预期。希望能帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值