首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不移除双空间的简单Scala函数

不移除双空间的简单Scala函数
EN

Stack Overflow用户
提问于 2020-03-12 04:52:21
回答 2查看 54关注 0票数 0

由于某种原因,当我输入一个带有“”等双空格的字符串时,函数不会从字符串中删除它们,当两个WUB在一行中生成时,它也不会删除它们。

例如:

songDecoder("WUBCATWUBWUBBALLWUB")输出"CAT_ _BALL“(下划线表示空格)

我可以通过其他方法修复这个问题,但是由于我不知道为什么我的当前代码不能工作,所以我想我应该要求修补我的理解。

代码语言:javascript
复制
def songDecoder(song:String):String = {
  val l = song.indexOf("WUB")

  if (song.contains("  ")) {
    val e = song.indexOf("  ")
    songDecoder(song.patch(e,Nil,1))
  }

  if (l==0) {
    val c = song.patch(l,Nil,3)
    songDecoder(c)
  }
  if (l== -1)
    song.trim
  else {
    val c = song.patch(l,Nil,2)
    val b = c.patch(l," ",1)
    songDecoder(b)
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-12 05:18:38

它不能工作的原因是,当您调用一个递归方法时,它最终会返回其结果。清除双空格的代码不能保存结果。

代码语言:javascript
复制
if (song.contains("  ")) {
  val e = song.indexOf("  ")
  songDecoder(song.patch(e,Nil,1)) //send patched song to decoder
}                                  //don't save returned string
//continue with unpatched song

第二个if块也在不保存结果的情况下进行递归。

代码语言:javascript
复制
if (l==0) {
  val c = song.patch(l,Nil,3)
  songDecoder(c)  //send patched song to decoder
}                 //don't save returned string
//continue with unpatched song

您可以删除这两个if块,并从您的方法中获得相同的结果。唯一影响输出的代码是最终的if/else,这是因为它位于方法的代码块的末尾。因此,无论if/else生成什么,都是该方法返回的内容。

代码语言:javascript
复制
if (l== -1)
  song.trim  //return the final result string
else {
  val c = song.patch(l,Nil,2) //remove one WUB
  val b = c.patch(l," ",1)    //replace with space
  songDecoder(b)  //return whatever the next recursion returns
}

作为一个FYI,这里有一个不同的方法。

代码语言:javascript
复制
def songDecoder(song:String):String =
  "(WUB)+".r.replaceAllIn(song, " ").trim
票数 4
EN

Stack Overflow用户

发布于 2020-03-12 07:13:41

不如这样吧:

代码语言:javascript
复制
song.split(“(WUB)+”).mkString(“ “).trim
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60647816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档