斯卡拉:划分字符串

时间:2010-10-24 05:04:15

标签: string scala

标题听起来有点疯狂,但在Scala("a" * 3 = "aaa")中有java.lang.String的*函数,为什么我们没有/ "aaa" / "a" = 3

干杯
伯尔萨

4 个答案:

答案 0 :(得分:6)

我喜欢这个想法。我将回答一个问题:为什么不存在 - 当我们有+函数时功能?

implicit def strDivider(s:String) = new {
  def /(q:String): Int = s.grouped(q.length).takeWhile(_ == q).size
}

scala> "aaa" / "a"
res0: Int = 3

scala> "abc" / "x"
res1: Int = 0

scala> "aaa" / "aa"
res2: Int = 1

答案 1 :(得分:2)

这样的操作似乎有点奇怪。划分"abc" / "x"是什么意思? String.split()函数似乎更通用,更实用。

答案 2 :(得分:2)

您还可以将String除以Int s:

def divide(s: String, i: Int): (String,String) = {
  require(i>0)
  val Pattern = ("(.+)" + """\1""" * i + "(.*)").r
  val Pattern(q, r) = s
  (q,r)
}

assert(divide("aaa", 3) == ("a", ""))
assert(divide("aaaa", 3) == ("a", "a"))
assert(divide("abababc", 3) == ("ab", "c"))
assert(divide("abc", 1) == ("abc", ""))
assert(divide("foobar", 3) == ("", "foobar"))

答案 3 :(得分:0)

"a" * 3这样的构造用于在将输出打印到stdout时创建分隔符,因此您可以执行"-" * 72而不是在一行上键入72个连字符。我不认为你可以通过划分获得什么好处。