【问题标题】:Scala : Idiomatic way of removing set of suffixes (substrings) from a StringScala:从字符串中删除一组后缀(子字符串)的惯用方法
【发布时间】:2016-11-17 18:29:19
【问题描述】:

我正在寻找一种惯用的方式来从 Scala 中的字符串中去除一组后缀(子字符串)。

val inputString = "abc@xyz.com"
val suffixes = List("\"", "@xyz.com")

基本上,后缀列表是从外部加载的,因此不是静态的。因此我不能使用链接 stripSuffix 方法的方法

(P.S. - 我将使用 inputString.stripPrefix("\"") 删除开头的 "

【问题讨论】:

    标签: scala


    【解决方案1】:

    您可以使用foldLeft.stripSuffix() 函数来迭代您的动态后缀列表并将它们从您的字符串中逐一删除。

    val inputString = "abc@xyz.com"
    val suffixes = List("\"", "@xyz.com")
    val strippedString = suffixes.foldLeft(inputString) { (string, suffix ) => 
        string.stripSuffix(suffix)
    }
    

    输出:abc

    使用这种方法,后缀的顺序会影响您的输出。

    【讨论】:

      【解决方案2】:

      不依赖后缀列表顺序的解决方案

      import scala.util.matching.Regex
      val pattern = s"(${suffixes.map(s => Regex.quote(s)).mkString("|")})+$$"
      inputString.replaceAll(pattern, "")
      

      虽然如果您的后缀列表很长,这可能会非常低效,因为它将整个列表编译成一个大的正则表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-10
        • 2017-03-18
        • 2015-11-11
        • 2019-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多