2010-09-13 19 views
22

Estoy buscando elegante forma en Scala para dividir una cadena dada en subcadenas de tamaño fijo (la última cadena de la secuencia podría ser más corta).¿Cómo dividir la cadena en subcadenas de igual longitud?

Así

split("Thequickbrownfoxjumps", 4) 

debe ceder

["Theq","uick","brow","nfox","jump","s"] 

Por supuesto que podría simplemente utilizar un bucle, pero tiene que ser una solución más elegante (estilo funcional).

Respuesta

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

De esta manera:

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


\***************************************************************************/ 
Cuestiones relacionadas