2015-11-18 135 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) 
    } 
}