2016-11-09 35 views
3

我有一个字符串,我需要转换为“canonical”视图,为此我需要在string上多次调用replaceAll()。我做了它的工作方式旁边:如何在Scala中实现string.replaceAll的链

val text = "Java Scala Fother Python JS C# Child" 
val replacePatterns = List("Java", "Scala", "Python", "JS", "C#") 
var replaced = text 
for (pattern <- replacePatterns) { 
    replaced = replaced.replaceAll(pattern, "") 
} 

此代码是导致取代=“Fother孩子”,我想,但它看起来非常必要,我想消除累加器“取代”。 在没有var的情况下,Scala有没有办法在一行中处理它?

谢谢。

回答

4

使用折叠过的图案和文字列表中被处理为起点:

replacePatterns.foldLeft(text){case (res, pattern) => res.replaceAll(pattern, "")} 
+0

工程就像一个魅力,谢谢!我认为它应该通过foldLeft,但不能确定在语法 –

+0

没有问题。欢迎来到Stack Overflow。 – maasg

+0

@AndreiMarkhel顺便说一句,'replaceAll'是一个相当昂贵的操作,在循环中使用。如果可能的话,尝试找到另一种清理字符串的方法(如标记化)。 – maasg