22
我正在尋找優雅方式Scala將給定的字符串拆分爲固定大小的子字符串(序列中的最後一個字符串可能更短)。如何將字符串拆分爲等長的子字符串?
所以
split("Thequickbrownfoxjumps", 4)
應該產生
["Theq","uick","brow","nfox","jump","s"]
當然,我可以簡單地用一個循環,但必須有一個更優雅(功能型)解決方案。
我正在尋找優雅方式Scala將給定的字符串拆分爲固定大小的子字符串(序列中的最後一個字符串可能更短)。如何將字符串拆分爲等長的子字符串?
所以
split("Thequickbrownfoxjumps", 4)
應該產生
["Theq","uick","brow","nfox","jump","s"]
當然,我可以簡單地用一個循環,但必須有一個更優雅(功能型)解決方案。
scala> val grouped = "Thequickbrownfoxjumps".grouped(4).toList
grouped: List[String] = List(Theq, uick, brow, nfox, jump, s)
像這樣:
def splitString(xs: String, n: Int): List[String] = {
if (xs.isEmpty) Nil
else {
val (ys, zs) = xs.splitAt(n)
ys :: splitString(zs, n)
}
}
splitString("Thequickbrownfoxjumps", 4)
/************************************Executing-Process**********************************\
( ys , zs )
Theq uickbrownfoxjumps
uick brownfoxjumps
brow nfoxjumps
nfox jumps
jump s
s "" ("".isEmpty // true)
"" :: Nil ==> List("s")
"jump" :: List("s") ==> List("jump", "s")
"nfox" :: List("jump", "s") ==> List("nfox", "jump", "s")
"brow" :: List("nfox", "jump", "s") ==> List("brow", "nfox", "jump", "s")
"uick" :: List("brow", "nfox", "jump", "s") ==> List("uick", "brow", "nfox", "jump", "s")
"Theq" :: List("uick", "brow", "nfox", "jump", "s") ==> List("Theq", "uick", "brow", "nfox", "jump", "s")
\***************************************************************************/