我有一个字符串,如下所示,
NSString * aString = @"This is the #substring1 and #subString2 I want";
如何只选择以“#”开头(并以空格结尾)的文本,在本例中为“subString1”和“subString2”?
注意:为清楚起见,对问题进行了编辑
最佳答案
您可以使用 NSScanner 来做到这一点拆分字符串。此代码将遍历一个字符串并用子字符串填充一个数组。
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];
下面是代码的工作原理:
- 最多扫描 #。如果未找到,扫描器将位于字符串的末尾。
- 如果扫描器位于字符串的末尾,我们就完成了。
- 扫描 # 字符,使其不在输出中。
- 向上扫描一个空格,扫描到的字符存放在
substring
中。如果 # 是最后一个字符,或者紧跟一个空格,该方法将返回 NO。否则它将返回 YES。 - 如果字符被扫描(该方法返回 YES),将
substring
添加到substrings
数组。 - 转到 1
关于Objective-C:如何提取字符串的一部分(例如从 '#' 开始),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6825834/