2015-11-18 3 views
0

Мне нужно использовать stringByReplacingOccurrencesOfString для нескольких случаев, мне было интересно, есть ли лучший способ написать код ниже в возможно одну строку?Объединение нескольких строкByReplacingOccurrencesOfString в один

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: Это может быть, я не знаю, вот почему я спрашиваю. Также может быть, что строка была получена вызовом 'description' в NSArray или что-то в этом роде. –

ответ

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

Это, вероятно, более эффективным, чтобы позволить Foundation оптимизировать несколько поиска/замены операции с набором символов. (Вы также можете сделать единую операцию поиска/замены регулярным выражением, но если все, что вам нужно заменить, это одиночные символы, набор символов может привести к повышению производительности - как правило, более конкретно вы можете указать свою проблему в 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) 
    } 
} 
Смежные вопросы