2016-05-11 8 views
2

Ich habe eine Karte, wo ich Schlüssel-> Wert-Paare von Parametern, die ich in einer Zeichenfolge ersetzen möchte. z.B. Karte (id -> 1, Name -> Peter) & https://example.com/#id/#name sollte in dieser Zeichenfolge führen: https://example.com/1/peterErsetze Vorkommen von Schlüssel-> Wertepaaren in String

Die bisher mein Code und es funktioniert. Gibt es eine Möglichkeit, dies ohne var arbeiten zu lassen?

def replaceUrlParams(url: String, params: Map[String, String]): String = { 
    var replacement: String = url 
    params.map(value => { 
     replacement = replacement.replaceAll("#"+value._1, value._2) 
    }) 
    replacement 
} 

Antwort

12

Sie suchen foldLeft:

params.foldLeft(url) { case (str, (key, value)) => 
    str.replaceAll("#" + key, value) 
} 
1

Verwenden Sie einfach ein Regex und replaceAllIn:

def replaceUrlParams(url: String, params: Map[String, String]): String = { 
    val placeholder = raw"#(\w[\w\d]*)".r; 
    placeholder.replaceAllIn(url, paramMatch => { 
    val key = paramMatch.group(1); 
    params(key) // Return the value of params[key] as the replacement. 
    }); 
} 
Verwandte Themen