Let’s say you have an NSString that contains both alphanumeric and non-alphanumeric characters and you want to strip the non-alphanumeric characters out of it. The hard way is to manually go through, character-by-character, and put the character in a new string if it matches certain criteria. But why do it the hard way?
Apple provides a class that we can use for this to great effect: NSCharacterSet
. We want alphanumeric characters, so we can create a character set of the characters we want using this method:
NSCharacterSet *alphanumericSet = [ NSCharacterSet alphanumericCharacterSet ];
Now we have a character set like we want. We just need a way to turn our string into a string that contains only those characters. Unfortunately, the closest thing in NSString
’s implementation is the -stringByTrimmingCharactersInSet:
method. But that seems to do the opposite of what we want. Fortunately NSCharacterSet
has our back here. We can use the -invertedSet
method. So here is our final code:
NSString *beginningString = @"Some string with non-alphanumeric characters. !@#$%^&*()";
NSCharacterSet *nonalphanumericSet = [[ NSCharacterSet alphanumericCharacterSet ] invertedSet ];
NSString *endingString = [ beginningString stringByTrimmingCharactersInSet:nonalphanumericSet ];
In this example, endingString
will be equal to “Somestringwithnonalphanumericcharacters”.
UPDATE: As it turns out, this only works if the non-alphanumeric characters are at the beginning or end of the NSString
. Whoops.
Here is a version that will work for everywhere in the string:
NSString *endingString = [ [ beginningString componentsSeparatedByCharactersInSet:nonalphanumericSet ] componentsJoinedByString:@”” ];