2016-11-09 95 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