2

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

原始字符串:

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

分离字符是|.

单独的字符串 1:你(范围:3、3)

单独的string2:实现(范围:12、7)

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

单独的 string4:工作(范围:51、4)

NSString 方法substringFromIndex:使得使用 NSString 找到这些范围成为可能,但这似乎效率低下。

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

4

1 回答 1

3

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

返回值

一组NSTextCheckingResult对象。每个结果 通过其 range 属性给出整体匹配范围,并通过其 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} :: "You" 范围内的字符串

{5, 6} 范围内的字符串 :: " will "

范围 {12, 7} :: "achieve" 的字符串

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

{37, 4} :: "want" 范围内的字符串

范围 {42, 8} :: " if you " 的字符串

{51, 4} :: "work" 范围内的字符串

{56, 5} :: "hard" 范围内的字符串

于 2012-04-30T14:31:25.237 回答