Scala:从String中删除后缀(子串)集的惯用法

时间:2016-11-17 18:29:20

标签: scala

我正在寻找一种从Scala中的字符串中剥离后缀(子串)集的惯用方法。

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

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

(P.S。 - 我将删除开头“使用inputString.stripPrefix(”\“”)

2 个答案:

答案 0 :(得分:4)

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

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

输出:abc

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

答案 1 :(得分:1)

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

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

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