目标C:如何提取部分string(例如,以'#'开头)
我有一个string,如下所示,
NSString * aString = @"This is the #substring1 and #subString2 I want";
我怎样才能select只以'#'开始(以空格结束)的文本,在这种情况下'subString1'和'subString2'?
注意:为了清晰起见编辑了问题
你可以使用NSScanner来分割string。 这段代码将遍历一个string,并用子string填充一个数组。
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];
以下是代码的工作原理:
- 扫描到一个#。 如果没有find,扫描仪将在string的末尾。
- 如果扫描器在string的末尾,我们就完成了。
- 扫描#字符,使其不在输出中。
- 扫描到一个空间,扫描存储在
substring
的字符。 如果#是最后一个字符,或者紧跟着一个空格,那么方法将返回NO。 否则,它将返回YES。 - 如果扫描了字符(方法返回YES),则将
substring
添加到substrings
数组中。 - GOTO 1
[aString substringWithRange:NSMakeRange(13, 10)]
会给你substring1
您可以使用以下方式计算范围:
NSRange startRange = [aString rangeOfString:@"#"]; NSRange endRange = [original rangeOfString:@"1"]; NSRange searchRange = NSMakeRange(startRange.location , endRange.location); [aString substringWithRange:searchRange]
会给你substring1
阅读更多: NSString或NSMutableString中字符的位置
和
http://iosdevelopertips.com/cocoa/nsrange-and-nsstring-objects.html
很简单,易于理解的版本避免NSRange
东西:
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]; } }
假设你正在寻找第一个以磅开头的string,并以空格结束,这可能会起作用。 我没有在我面前的XCode,所以请原谅我,如果有一个语法错误或长度closures1某处:
-(NSString *)StartsWithPound:(NSString *)str { NSRange range = [str rangeOfString:@"#"]; if(range.length) { NSRange rangeend = [str rangeOfString:@" " options:NSLiteralSearch range:NSMakeRange(range.location,[str length] - range.location - 1)]; if(rangeend.length) { return [str substringWithRange:NSMakeRange(range.location,rangeend.location - range.location)]; } else { return [str substringFromIndex:range.location]; } } else { return @""; } }
另一个简单的方法
NSRange hashtag = [aString rangeOfString:@"#"]; NSRange word = [[aString substringFromIndex:hashtag.location] rangeOfString@" "]; NSString *hashtagWord = [aString substringWithRange:NSMakeRange(hashtag.location, word.location)];
这是我会做的:
NSString *givenStringWithWhatYouNeed = @"What you want to look through"; NSArray *listOfWords = [givenStringWithWhatYouNeed componentsSeparatedByString:@" "]; for (NSString *word in listOfWords) { if ([[word substringWithRange:NSMakeRange(0, 1)]isEqualToString:@"#"]) { NSString *whatYouWant = [[word componentsSeparatedByString:@"#"]lastObject]; } }
然后你可以用你whatYouWant
实例来做你所需要的。 如果你想知道它是哪一个string(如果是子string1或2),请检查listOfWords
数组中string的索引。
我希望这有帮助。
selectNSString中以“#”开始的所有单词的一般和简单的代码是:
NSString * aString = @"This is the #substring1 and #subString2 ..."; NSMutableArray *selection=@[].mutableCopy; while ([aString rangeOfString:@"#"].location != NSNotFound) { aString = [aString substringFromIndex:[aString rangeOfString:@"#"].location +1]; NSString *item=([aString rangeOfString:@" "].location != NSNotFound)?[aString substringToIndex:[aString rangeOfString:@" "].location]:aString; [selection addObject:item]; }
如果你仍然需要原始string,你可以做一个副本。 内联条件是用来防止你所select的项目是最后一个字