查找由字符串分隔的NSString内的范围

时间:2012-04-30 14:15:30

标签: iphone ios string substring

尽管iOS提供了许多有用的字符串方法,但我找不到一个很好的解决方案来获取由给定字符分隔的字符串范围。

原始字符串:

  

|您|将|实现|你想要的一切|如果你|工作|硬

分隔字符为|

单独的string1:你(范围:3,3)

单独的string2:achieve(范围:12,7)

单独的string3:want(范围:37,4)

单独的string4:work(范围:51,4)

NSString方法的substringFromIndex:可以使用NSString找到这些范围,但这看起来效率很低。

请让我知道解决这个问题的更好方法。

1 个答案:

答案 0 :(得分:3)

您应该使用NSRegularExpressionmatchesInString:options:range:方法。

  

返回值

     

NSTextCheckingResult个对象的数组。每个结果   通过其范围属性和范围给出整体匹配范围   通过其rangeAtIndex:方法获得每个捕获组的数量。该   如果其中一个捕获组没有,则返回范围{NSNotFound,0}   参加这场特别的比赛。

您可能拥有以下代码:

NSString *str = @"|You| will |achieve| everything you |want| if you |work| hard";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:
    @"[^|]*" options: 0 error:nil];
NSArray *results = [regex matchesInString:str 
                                  options:0 
                                    range:NSMakeRange(0, [str length])];
// ... do interesting code on results...
// Note that you should iterate through the array and use the 'range' property
// to get the range.

for (NSTextCheckingResult *textResult in results)
{
   if (textResult.range.length > 0)
   {
      NSString *substring = [myStr substringWithRange:textResult.range];
      NSLog(@"string at range %@ :: \"%@\"", 
            NSStringFromRange(textResult.range), 
            substring);
   }
}

日志:

  

范围{1,3}的字符串::“你”

     

范围{5,6}的字符串::“将”

     

范围{12,7}的字符串::“实现”

     

范围{20,16}的字符串::“你所有的一切”

     

范围{37,4}的字符串::“想要”

     

字符串在{42,8} ::“如果你”

     

范围{51,4}的字符串::“工作”

     

范围{56,5}的字符串::“硬”