2016-11-17 8 views
1

Scalaの文字列から一連のサフィックス(部分文字列)を取り除く慣習的な方法を探しています。Scala:文字列からサフィックス(部分文字列)の集合を削除する慣例的な方法

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

基本的に、接尾辞リストは外部から読み込まれ、したがって静的ではありません。したがって、私はstripSuffix方法に連鎖するのアプローチを使用することはできません

(PS - 私は「inputString.stripPrefixを使用して(」スタート\「」)

答えて

4

あなたは.stripSuffix()機能と一緒ににfoldLeftを使用する可能性を削除しますサフィックスのあなたの動的なリストを反復して、文字列から一つずつそれらを取り除く

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

出力:。abc

このアプローチでは、あなたのサフィックスの順序ます私はあなたの出力をmpactします。

1

それは一つの大きな正規表現にリスト全体をコンパイルするので、あなたのサフィックスのリストが長い場合、これは非常に非効率的である可能性がありますが、接尾辞リストの順番

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

に依存しないソリューション。

関連する問題