【问题标题】:How to split string into equal-length substrings?如何将字符串拆分为等长的子字符串?
【发布时间】:2011-04-11 14:43:25
【问题描述】:

我正在Scala 中寻找一种优雅的方式来将给定的字符串拆分为固定大小的子字符串(序列中的最后一个字符串可能更短)。

所以

split("Thequickbrownfoxjumps", 4)

应该让步

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

当然我可以简单地使用循环,但必须有一个更优雅(功能风格)的解决方案。

【问题讨论】:

    标签: scala functional-programming split


    【解决方案1】:
    scala> val grouped = "Thequickbrownfoxjumps".grouped(4).toList
    grouped: List[String] = List(Theq, uick, brow, nfox, jump, s)
    

    【讨论】:

    • grouped .. 不知何故,我不能“坚持”该方法名称 - 继续需要再次查找它:尤其是考虑到 partitition - 这是一个基于谓词的拆分
    【解决方案2】:

    像这样:

    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")
    
    
    \***************************************************************************/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-15
      • 2016-04-17
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多