【问题标题】:Remove words of a string started by uppercase characters in Scala在Scala中删除以大写字符开头的字符串的单词
【发布时间】:2016-08-24 18:29:40
【问题描述】:

我想编写一个算法,删除字符串中以大写字符开头的每个单词。

例如:

原始字符串:“今天是 29 日星期五。”

期望的结果:“是 29 日。”

这个算法我写了,但是不完整:

def removeUpperCaseChars(str: String) = {
    for (i <- 0 to str.length - 1) {
      if (str.charAt(i).isUpper) {
        var j = i
        var cont = i
        while (str.charAt(j) != " ") {
          cont += 1
        }
        val subStr = str.substring(0, i) + str.substring(cont, str.length - 1)
        println(subStr)
      }
    }
  }

它(据说)删除了每个带有大写字符的单词,而不是只删除以大写字符开头的单词。更糟糕的是,Scala 没有给出任何结果。

谁能帮我解决这个问题?

【问题讨论】:

    标签: string scala char substring


    【解决方案1】:

    string.replaceAll("""\b[A-Z]\w+""", "")怎么样?

    【讨论】:

    • 您可能还想在单词后匹配空格,否则会留下它们"_is__the_29."
    • 嗯,问题是删除单词,它没有提到空格。
    • 是的,但是它仍然有一个声明Desired result: "is the 29Th.":p
    • 我不知道,也许 html 折叠了那些多余的空格? :) 我想,如果规定的要求与手工制作的样品相矛盾,你必须选择前者:)
    【解决方案2】:

    有一些假设,就像单词总是用空格分开,你可以这样实现:

    scala> "Today is Friday the 29Th.".split("\\s+").filterNot(_.head.isUpper).mkString(" ")
    res2: String = is the 29Th.
    

    我们真的不想像在 scala 中那样编写算法。这是您在 C 中执行此操作的一种方式。

    【讨论】:

    • 或只是split(" +") 允许任意数量的空格。
    • 是的,我知道,或者更好\\s+ 但是在加入单词之后,它总是有一个空格,所以我们可能会丢失一些空格,这就是我做出假设的原因,但也许是代码使用 \\s+ 会更好。
    • 嗯,它比我想象的要简单得多。谢谢,这正是我想要的。
    猜你喜欢
    • 2018-12-22
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多