在Objective-C中replacestring中的多个字符?

在PHP中,我可以这样做:

$new = str_replace(array('/', ':', '.'), '', $new); 

…replace字符/的所有实例。 用一个空白string(删除它们)

我可以在Objective-C中轻松做到这一点吗? 或者我必须推出自己的?

目前我正在对stringByReplacingOccurrencesOfString进行多次调用:

 strNew = [strNew stringByReplacingOccurrencesOfString:@"/" withString:@""]; strNew = [strNew stringByReplacingOccurrencesOfString:@":" withString:@""]; strNew = [strNew stringByReplacingOccurrencesOfString:@"." withString:@""]; 

谢谢,
亚光

这样做有点低效:

 NSString *s = @"foo/bar:baz.foo"; NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."]; s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""]; NSLog(@"%@", s); // => foobarbazfoo 

看看NSScanner-[NSString rangeOfCharacterFromSet: ...]如果你想更有效地做到这一点。

有些情况下,你的方法足够好,我认为马特..顺便说一句,我认为这是更好的使用

 [strNew setString: [strNew stringByReplacingOccurrencesOfString:@":" withString:@""]]; 

而不是

 strNew = [strNew stringByReplacingOccurrencesOfString:@"/" withString:@""]; 

因为我认为你用NSString覆盖NSMutableString指针可能导致内存泄漏。

Nicholas基本上和上面一样,但是如果你想删除除了一组字符之外的所有东西(比如说你想删除不在“ABCabc123”集合中的所有东西),那么你可以这样做:

 NSString *s = @"A567B$%C^.123456abcdefg"; NSCharacterSet *doNotWant = [[NSCharacterSet characterSetWithCharactersInString:@"ABCabc123"] invertedSet]; s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""]; NSLog(@"%@", s); // => ABC123abc 

如果你只想要字母数字,那么在剥离符号等方面很有用。

最近不得不这样做,想分享一个有效的方法:

(假设someText是一个NSString或文本属性)

 NSString* someText = @"1232342jfahadfskdasfkjvas12!"; 

(这个例子会从string中去掉数字)

 [someText stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [someText length])]; 

请记住,您将需要使用Obj-c转义字符转义正则expression式字符:

(obj-c使用双反斜杠来转义特殊的正则expression式文字)

 ...stringByReplacingOccurrencesOfString:@"[\\\!\\.:\\/]" 

是什么让这个有趣的是,NSRegularExpressionSearch选项很less使用,但可以导致一些非常强大的控制:

你可以在这里find一个很好的iOS正则expression式教程,以及regex101.com上正则expression式的更多内容

 + (NSString*) decodeHtmlUnicodeCharactersToString:(NSString*)str { NSMutableString* string = [[NSMutableString alloc] initWithString:str]; // #&39; replace with ' NSString* unicodeStr = nil; NSString* replaceStr = nil; int counter = -1; for(int i = 0; i < [string length]; ++i) { unichar char1 = [string characterAtIndex:i]; for (int k = i + 1; k < [string length] - 1; ++k) { unichar char2 = [string characterAtIndex:k]; if (char1 == '&' && char2 == '#' ) { ++counter; unicodeStr = [string substringWithRange:NSMakeRange(i + 2 , 2)]; // read integer value ie, 39 replaceStr = [string substringWithRange:NSMakeRange (i, 5)]; // #&39; [string replaceCharactersInRange: [string rangeOfString:replaceStr] withString:[NSString stringWithFormat:@"%c",[unicodeStr intValue]]]; break; } } } [string autorelease]; if (counter > 1) return [self decodeHtmlUnicodeCharactersToString:string]; else return string; } 

如果你想删除的字符是相邻的,你可以使用

 stringByReplacingCharactersInRange:(NSRange) withString:(NSString *) 

除此之外,我认为多次使用相同的function并不是那么糟糕。 这比创build一个更通用的方法来做更大的方法更可读。

这是Swift 3中使用replaceOccurances的regularExpression选项的一个例子。

使用replacementOccurrences和String.CompareOptions.regularExpression选项。

示例(Swift 3):

 var x = "<Hello, [play^ground+]>" let y = x.replacingOccurrences(of: "[\\[\\]^+<>]", with: "7", options: .regularExpression, range: nil) print(y) 

输出:

 7Hello, 7play7ground777 

在String上创build一个扩展…

 extension String { func replacingOccurrences(of strings:[String], with replacement:String) -> String { var newString = self for string in strings { newString = newString.replacingOccurrences(of: string, with: replacement) } return newString } } 

像这样调用它:

 aString = aString.replacingOccurrences(of:['/', ':', '.'], with:"")