String Scala:分割字符串
这个标题听起来有点疯狂,但是在Scala中有java.lang.String的*函数(String Scala:分割字符串,string,scala,String,Scala,这个标题听起来有点疯狂,但是在Scala中有java.lang.String的*函数(“a”*3=“aaa”),为什么我们没有一个/函数,以便“aaa”/“a”=3 干杯 帕萨这样的手术似乎有点奇怪。“abc”/“x”的除法是什么意思?该函数在这里似乎更通用、更有用。类似于“a”*3的构造用于在将输出打印到stdout时创建分隔符,这样您就可以执行“-”*72操作,而不是在一行中键入72个连字符。不过,我看不出分割有什么好处。我喜欢这种想法。我将用一个问题来回答:当我们有一个+函数时,为什么没有
“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"))
谢谢你的回答。两者都没有道理。我对此很感兴趣,同时想到了一种从文档中删除额外空白的愚蠢方法。