2016-11-17 93 views
1

我正在寻找从Scala中的一个串剥离后缀(子)集的惯用方式删除后缀(子)的一套习惯的方法。斯卡拉:从字符串

val inputString = "[email protected]" 
val suffixes = List("\"", "@xyz.com") 

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

(PS - 我会去掉“使用inputString.stripPrefix(”出发

回答

4

你可以使用foldLeft沿与.stripSuffix()功能\“”) 。遍历您动态后缀的列表,并从你的字符串一个接一个带他们

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

输出:abc

用这种方法你后缀的订单将我压缩你的输出。

1

不依赖后缀列表顺序

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

上虽然这可能是非常低效的,如果你的后缀列表很长,因为它编译整个列表变成一个大正则表达式的一个解决方案。