2010-09-13 19 views
22

इम Scala में एक सुरुचिपूर्ण रास्ता तय आकार की सबस्ट्रिंग में एक दिया स्ट्रिंग (अनुक्रम का अंतिम स्ट्रिंग कम हो सकता है) को विभाजित करने के लिए देख रहे हैं।स्ट्रिंग को बराबर लंबाई वाले सबस्ट्रिंग में कैसे विभाजित करें?

तो

split("Thequickbrownfoxjumps", 4) 

उपज

["Theq","uick","brow","nfox","jump","s"] 
बेशक

मैं बस एक पाश इस्तेमाल कर सकते हैं करना चाहिए, लेकिन वहाँ एक और अधिक सुरुचिपूर्ण (कार्यात्मक शैली) समाधान हो गया है।

उत्तर

55
scala> val grouped = "Thequickbrownfoxjumps".grouped(4).toList 
grouped: List[String] = List(Theq, uick, brow, nfox, jump, s) 
1
इस तरह

:

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") 


\***************************************************************************/ 
संबंधित मुद्दे