加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

斯卡拉 – muliline字符串拆分

发布时间:2020-12-16 09:26:16 所属栏目:安全 来源:网络整理
导读:我有这个: val msg = "Preparado para cocinar..."val message = msg.splitAt(msg.length()/2)println(message._1 + "n" + message._2.trim()) 问题是我得到了这个结果(bcz我只是把它分成中间): Preparado para cocinar... 我怎么能有一个多(不仅是2部分)
我有这个:

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

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

问题是我得到了这个结果(bcz我只是把它分成中间):

Preparado pa
ra cocinar...

我怎么能有一个多(不仅是2部分)显示的消息,但它应该在不在句子中间的空格中分开?

解决方法

一个相当优雅的功能解决方案

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

只检查空列表一次的变体

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
  }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读