Objective-C: How to extract part of a String (e.g. start with '#')
You can do this using an NSScanner to split the string up. This code will loop through a string and fill an array with substrings.
NSString * aString = @"This is the #substring1 and #subString2 I want";NSMutableArray *substrings = [NSMutableArray new];NSScanner *scanner = [NSScanner scannerWithString:aString];[scanner scanUpToString:@"#" intoString:nil]; // Scan all characters before #while(![scanner isAtEnd]) { NSString *substring = nil; [scanner scanString:@"#" intoString:nil]; // Scan the # character if([scanner scanUpToString:@" " intoString:&substring]) { // If the space immediately followed the #, this will be skipped [substrings addObject:substring]; } [scanner scanUpToString:@"#" intoString:nil]; // Scan all characters before next #}// do something with substrings[substrings release];
Here is how the code works:
- Scan up to a #. If it isn't found, the scanner will be at the end of the string.
- If the scanner is at the end of the string, we are done.
- Scan the # character so that it isn't in the output.
- Scan up to a space, with the characters that are scanned stored in
substring
. If either the # was the last character, or was immediately followed by a space, the method will return NO. Otherwise it will return YES. - If characters were scanned (the method returned YES), add
substring
to thesubstrings
array. - GOTO 1
[aString substringWithRange:NSMakeRange(13, 10)]
would give you substring1
You can calculate the range using:
NSRange startRange = [aString rangeOfString:@"#"];NSRange endRange = [original rangeOfString:@"1"];NSRange searchRange = NSMakeRange(startRange.location , endRange.location);[aString substringWithRange:searchRange]
would give you substring1
Read more:Position of a character in a NSString or NSMutableString
and
http://iosdevelopertips.com/cocoa/nsrange-and-nsstring-objects.html
Pretty simple, easy to understand version avoiding NSRange
stuff:
NSArray * words = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSMutableArray * mutableWords = [NSMutableArray new];for (NSString * word in words){ if ([word length] > 1 && [word characterAtIndex:0] == '#'){ NSString * editedWord = [word substringFromIndex:1]; [mutableWords addObject:editedWord]; }}