Objective-C中的字符串替换

4th*_*ace 272 iphone objective-c nsstring ios

替换字符的最佳方法是使用Objective-C for iPhone SDK中的字符串?

epa*_*tel 776

你可以使用这个方法

- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target 
                                        withString:(NSString *)replacement
Run Code Online (Sandbox Code Playgroud)

...获取一个替换了子字符串的新字符串(参见NSString其他文档)

使用示例

NSString *str = @"This is a string";

str = [str stringByReplacingOccurrencesOfString:@"string"
                                     withString:@"duck"];
Run Code Online (Sandbox Code Playgroud)

  • 它不会改变.str现在包含一个全新的字符串.stringByReplacingOccurencesOfString不会改变字符串.它只返回一个新字符串. (13认同)
  • 我认为拥有NSString和NSMutableString子类是因为NSString的一个实例是*不可更改的*.虽然 - 就像任何理智的人一样,我宁愿每天都带着鸭子而不是字符串 - 事实上,你只是覆盖了`str`的​​内容,这让我大吃一惊. (2认同)

mip*_*adi 22

NSString对象是不可变的(它们不能被更改),但是有一个可变的子类NSMutableString,它为您提供了几种替换字符串中字符的方法.这可能是你最好的选择.


小智 10

如果您想要多个字符串替换:

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


Mar*_*uiz 7

它还使用stringByReplacingCharactersInRange:withString替换字符串:

for (int i = 0; i < card.length - 4; i++) {

    if (![[card substringWithRange:NSMakeRange(i, 1)] isEqual:@" "]) {

        NSRange range = NSMakeRange(i, 1);
        card = [card stringByReplacingCharactersInRange:range withString:@"*"];

    }

} //out: **** **** **** 1234
Run Code Online (Sandbox Code Playgroud)