在Objective-C中替换字符串中的多个字符?

Mat*_*ton 48 string iphone replace objective-c

在PHP中我可以这样做:

$new = str_replace(array('/', ':', '.'), '', $new);
Run Code Online (Sandbox Code Playgroud)

...替换字符/的所有实例.用空字符串(删除它们)

我可以在Objective-C中轻松完成吗?或者我必须自己动手?

目前我正在多次拨打电话stringByReplacingOccurrencesOfString:

strNew = [strNew stringByReplacingOccurrencesOfString:@"/" withString:@""];
strNew = [strNew stringByReplacingOccurrencesOfString:@":" withString:@""];
strNew = [strNew stringByReplacingOccurrencesOfString:@"." withString:@""];
Run Code Online (Sandbox Code Playgroud)

谢谢,
亚光

Nic*_*ley 122

这样做效率有点低效:

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

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


N. *_*ham 27

有些情况下你的方法足够好我认为无光泽.顺便说一下,我觉得最好用

[strNew setString: [strNew stringByReplacingOccurrencesOfString:@":" withString:@""]];
Run Code Online (Sandbox Code Playgroud)

而不是

strNew = [strNew stringByReplacingOccurrencesOfString:@"/" withString:@""];
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,假设`strNew`是一个`NSMutableString`.但是如果你打算使用NSMutableString,你可以做一下`[strNew replaceOccurrencesOfString:@":"withString:@""options:0 range:NSMakeRange(0,[strNew length])]` (2认同)

Tom*_* C. 7

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

(假设someText是NSString或text属性)

NSString* someText = @"1232342jfahadfskdasfkjvas12!";
Run Code Online (Sandbox Code Playgroud)

(此示例将从字符串中删除数字)

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

请记住,您需要使用Obj-c转义字符来转义正则表达式文字字符:

(obj-c使用双反斜杠来逃避特殊的正则表达式文字)

...stringByReplacingOccurrencesOfString:@"[\\\!\\.:\\/]" 
Run Code Online (Sandbox Code Playgroud)

使这个有趣的是NSRegularExpressionSearch选项很少使用,但可以导致一些非常强大的控件:

你可以在这里找到一个很好的iOS正则表达式教程,更多关于regex101.com上的正则表达式


Sto*_*nz2 6

与上面发布的Nicholas基本相同,但是如果你想删除除了一组字符之外的所有内容(比如你想删除不在集合"ABCabc123"中的所有内容),那么你可以执行以下操作:

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

如果您只需要字母数字,则可用于剥离符号等.