2011-03-27 49 views
5

我刚刚启动Scala,因此让我的头脑以更实用的方式做事。斯卡拉 - 以功能方式修改字符串

只是不知道是否有实现类似下面的一个功能更强大的方式:

def expand(exp: String): String = { 
    var result = exp 
    for ((k,v) <- libMap) {result = result.replace(k, "(%s)".format(v))} 
    result 
} 

或一般来讲,给出一个字符串和一些迭代集合,经过收集和每一个元素,增量修改输入字符串。

干杯

回答

8

一般模式

var result = init 
for (foo <- bar) { result = f(result, foo)} 
result 

可在功能上表现为

bar.foldLeft(init)(f) 

所以你的情况下,该becomas:

libMap.foldLeft(exp){ case(result, (k,v)) => result.replace(k, "(%s)".format(v))}