Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove characters in NSCharacterSet from NSString

I have an NSCharacterSet which contains all the characters I want to remove from my NSString.

How can I do that?

like image 743
cschwarz Avatar asked Aug 13 '10 12:08

cschwarz


3 Answers

If you're not too worried about efficiency, a simple way would be [[myString componentsSeparatedByCharactersInSet:myCharacterSet] componentsJoinedByString:@""].

Otherwise, you could run through the characters in a loop, appending ones that weren't in the set onto a new string. If you do it that way, remember to use an NSMutableString for your result as you're building it up.

like image 101
David Avatar answered Nov 19 '22 05:11

David


Checkout the following code:

@implementation NSString(Replacing)

- (NSString *)stringByReplacingCharactersInSet:(NSCharacterSet *)charSet withString:(NSString *)aString {
    NSMutableString *s = [NSMutableString stringWithCapacity:self.length];
    for (NSUInteger i = 0; i < self.length; ++i) {
        unichar c = [self characterAtIndex:i];
        if (![charSet characterIsMember:c]) {
            [s appendFormat:@"%C", c];
        } else {
            [s appendString:aString];
        }
    }
    return s;
}


@end

If you specify a replacement string of @"" you would remove the characters in the set.

like image 28
Werner Altewischer Avatar answered Nov 19 '22 04:11

Werner Altewischer


You can use an NSScanner to scan through the string, scanning a chunk of characters-not-in-the-set, appending it to your result string, scanning the characters-in-the-set into a variable you otherwise ignore, and repeating until the scanner reaches the end.

like image 3
Peter Hosey Avatar answered Nov 19 '22 06:11

Peter Hosey