scala - muliline string split

后端 未结 3 833
太阳男子
太阳男子 2020-12-12 03:10

I have this:

val msg = \"Preparado para cocinar...\"
val message = msg.splitAt(msg.length()/2)

println(message._1 + \"\\n\" + message._2.trim())
         


        
3条回答
  •  执笔经年
    2020-12-12 03:19

    A reasonably elegant functional solution

    def wordWrap(s: String, n: Int) = s.split("\\s").foldLeft(List[String]())
         { (lines, word) =>
            if (lines.isEmpty || lines.head.length + word.length + 1 > n)
              word :: lines
           else
             (lines.head + " " + word) :: lines.tail
         }
        .reverse
    
    wordWrap( "Preparado para cocinar...", 23)
    // List(Preparado para, cocinar...)
    wordWrap( "Preparado para cocinar...", 5)
    // List(Preparado, para, cocinar...)
    wordWrap("A quick brown fox jumps over the lazy dog.", 10)
    // List(A quick, brown fox, jumps over, the lazy, dog. )
    

    A variant that just checks the empty list once

    def wordWrap(s: String, n: Int) = {
        val words = s.split("\\s")
        if (words.isEmpty) Nil
        else
          words.tail.foldLeft(List[String](words.head)){ (lines, word) =>
             if (lines.head.length + word.length + 1 > n) 
               word :: lines
             else
              (lines.head + " " + word) :: lines.tail
          }.reverse
      }
    

提交回复
热议问题