【问题标题】:returning all index of a character in a NSString返回 NSString 中字符的所有索引
【发布时间】:2011-08-02 07:05:53
【问题描述】:

是否有一种方法可以返回 NSString 中出现的字母“a”的所有索引?尝试查看文档,似乎没有任何文档。所以我可能不得不将 NSString 分解为 NSArray 的字符并进行迭代?

【问题讨论】:

    标签: iphone objective-c ipad


    【解决方案1】:

    试试 [NSRegularExpression enumerateMatchesInString:options:range:usingBlock:]。或者实际上,任何其他 NSRegularExpression 匹配方法。他们不会返回 NSIndexSet - 它是一个 NSTextChecking 对象的数组 - 但你可以很容易地从中获取索引。

    这是一些(未经测试!)示例代码:

    NSString* aString = @"Here's a string, that contains some letters a";
    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"a" options:0 error:NULL];
    NSArray* matches = [regex matchesInString:aString options:0 range:NSMakeRange(0,[aString length])];
    for(NSTextCheckingResult* i in matches) {
        NSRange range = i.range;
        NSUInteger index = range.location; //the index you were looking for!
        //do something here
    }
    

    使用enumerateMatchesInString其实效率更高,但不知道大家对Blocks有多熟悉,所以我选择了NSArray这种更常见的快速枚举。

    更新:使用块的相同代码。

    NSString* aString = @"Here's a string, that contains some letters a";
    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"a";
    [regex enumerateMatchesInString:aString 
                            options:0 
                              range:NSMakeRange(0,[aString length])
                         usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
        NSRange range = result.range;
        NSUInteger index = range.location; //the index you were looking for
        //do work here
    
    }];
    

    【讨论】:

    • 这应该是 NSUInteger index = range.location;而不是 NSUInteger index = result.location;我说的对吗?
    【解决方案2】:
    NSString *full_string=@"The Quick Brown Fox Brown";
        NSMutableArray *countloc=[[NSMutableArray alloc]init];
        int temp=0;
        int len=[full_string length];
        for(int i =0;i<[full_string length];i++)
        {
                NSRange range=[full_string rangeOfString:@"Brown" options:0 range:NSMakeRange(temp,len-1)];
                if(range.location<[full_string length])
                [countloc addObject:[NSString stringWithFormat:@"%d",range.location]];
                temp=range.location+1;
                len=[full_string length]-range.location;
                i=temp;
    
        }
    

    在这里搜索子字符串 Brown 和 子字符串的位置存储在数组countloc中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-16
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 2020-07-11
      相关资源
      最近更新 更多