String Scala:分割字符串

String Scala:分割字符串,string,scala,String,Scala,这个标题听起来有点疯狂,但是在Scala中有java.lang.String的*函数(“a”*3=“aaa”),为什么我们没有一个/函数,以便“aaa”/“a”=3 干杯 帕萨这样的手术似乎有点奇怪。“abc”/“x”的除法是什么意思?该函数在这里似乎更通用、更有用。类似于“a”*3的构造用于在将输出打印到stdout时创建分隔符,这样您就可以执行“-”*72操作,而不是在一行中键入72个连字符。不过,我看不出分割有什么好处。我喜欢这种想法。我将用一个问题来回答:当我们有一个+函数时,为什么没有

这个标题听起来有点疯狂,但是在Scala中有java.lang.String的*函数(
“a”*3=“aaa”
),为什么我们没有一个/函数,以便
“aaa”/“a”=3

干杯

帕萨

这样的手术似乎有点奇怪。“abc”/“x”的除法是什么意思?该函数在这里似乎更通用、更有用。

类似于
“a”*3
的构造用于在将输出打印到stdout时创建分隔符,这样您就可以执行
“-”*72
操作,而不是在一行中键入72个连字符。不过,我看不出分割有什么好处。

我喜欢这种想法。我将用一个问题来回答:当我们有一个+函数时,为什么没有-function

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

您还可以将
String
s除以
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"))

谢谢你的回答。两者都没有道理。我对此很感兴趣,同时想到了一种从文档中删除额外空白的愚蠢方法。