2015-11-18 165 views
0

我必須使用stringByReplacingOccurrencesOfString來處理多種情況,我想知道是否有更好的方式將下面的代碼寫入可能的單行?將多個stringByReplacingOccurrencesOfString合併爲一個

let newString = list.stringByReplacingOccurrencesOfString("\n", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil) 
let newString2 = newString.stringByReplacingOccurrencesOfString("(", withString: "") 
let newString3 = newString2.stringByReplacingOccurrencesOfString(")", withString: "") 
let newString4 = newString3.stringByReplacingOccurrencesOfString(" ", withString: "") 
+1

我的第一個問題是:*「爲什麼需要?」* - 爲什麼需要刪除括號,空格和換行符從字符串?也許這個問題可以在更早的時候得到解決,在哪裏創建字符串? –

+0

@MartinR:這通常是對不使用RegEx的嘗試。 –

+1

@VatsalManot:這可能是,我不知道,這就是爲什麼我問。也可能是這個字符串是通過在NSArray或類似的東西上調用'description'來獲得的。 –

回答

2

寫一個擴展名。

extension String 
{ 
    public mutating func replace(substrings: [String], with other: String) 
    { 
     substrings.forEach({ self = stringByReplacingOccurrencesOfString($0, withString: other) }) 
    } 
} 
+0

完美,完全符合我的要求! – SlopTonio

2

一種可能的方式:

let clean = "(abc (def)\tghi)\n".stringByReplacingOccurrencesOfString(
    "[()[:space:]]", 
    withString: "", 
    options: NSStringCompareOptions.RegularExpressionSearch 
) 
1

這可能更有效率,讓基金會優化多個搜索/用字符集替換操作。 (您也可以使用正則表達式進行單個搜索/替換操作,但如果您需要替換的只是單個字符,則字符集可能會帶來更好的性能 - 通常,更具體的說,您可以將問題陳述給API,較好的一個解決方案可以提供。)

let chars = NSCharacterSet(charactersInString: "() \n") 
text.componentsSeparatedByCharactersInSet(chars).joinWithSeparator("") 

奇怪的是,基金會可以修剪從字符串的開始/結束一個字符集,但不能從一個字符串中剝離。不過,它可以通過字符集來分割一個字符串,所以你所要做的就是用空的分隔符將它們拼接在一起。當然,您可以將它包裝在自己的擴展中以方便使用:

extension String { 
    func stringByStrippingCharactersInSet(set: NSCharacterSet) -> String { 
     return self.componentsSeparatedByCharactersInSet(chars).joinWithSeparator("") 
    } 
    mutating func stripCharactersInSet(set: NSCharacterSet) { 
     self = self.stringByStrippingCharactersInSet(set) 
    } 
}