在PHP中我可以这样做:
$new = str_replace(array('/', ':', '.'), '', $new);
...替换字符/的所有实例.用空字符串(删除它们)
我可以在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指针,这可能会导致内存泄漏.
最近不得不这样做,并希望分享一个有效的方法:
(假设someText是NSString或text属性)
NSString* someText = @"1232342jfahadfskdasfkjvas12!";
(此示例将从字符串中删除数字)
[someText stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [someText length])];
请记住,您需要使用Obj-c转义字符来转义正则表达式文字字符:
(obj-c使用双反斜杠来逃避特殊的正则表达式文字)
...stringByReplacingOccurrencesOfString:@"[\\\!\\.:\\/]"
使这个有趣的是NSRegularExpressionSearch选项很少使用,但可以导致一些非常强大的控件:
你可以在这里找到一个很好的iOS正则表达式教程,更多关于regex101.com上的正则表达式
与上面发布的Nicholas基本相同,但是如果你想删除除了一组字符之外的所有内容(比如你想删除不在集合"ABCabc123"中的所有内容),那么你可以执行以下操作:
NSString *s = @"A567B$%C^.123456abcdefg"; NSCharacterSet *doNotWant = [[NSCharacterSet characterSetWithCharactersInString:@"ABCabc123"] invertedSet]; s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""]; NSLog(@"%@", s); // => ABC123abc
如果您只需要字母数字,则可用于剥离符号等.