iOS 如何将不同的属性添加到同一子字符串的多次出现

iOS how to add different attributes to multiple occurrences of same substring

我想为同一子字符串的两次出现分别创建一个具有不同属性的 NSAttributedString。

NSString *text = @"ABC & ABC";
NSString *substring = @"ABC"
NSMutableAttributedString *attStr= [[NSMutableAttributedString alloc] initWithString:text];

NSRange range = [[attStr string] rangeOfString:substring];

我想使用方法
为每次出现的子字符串设置不同的属性 [attStr addAttributes:attributes range:range]。但是,无论我 运行 它多少次,只有第一次出现的 substring 会改变属性。

有没有办法让 addAtributes: 知道去寻找尚未设置属性的子字符串?

您可以通过对 NSRegularExpression 进行迭代来获得包含多个匹配项的数组:

NSString *string = @"ABC & ABC";
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"ABC" options:NSRegularExpressionCaseInsensitive error:&error];

NSRange range = NSMakeRange(0, string.length);

if (!error) {
    [regex enumerateMatchesInString:string options:NSMatchingReportCompletion range:range usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
        NSLog(@"%@",result);
    }];
}

然后从result.range属性获取范围。

您可以计算单词重复的时间。

NSUInteger count = 0, length = [@"ABC & ABC" length];
    NSRange range = NSMakeRange(0, length);
    while (range.location != NSNotFound) {
        range = [self.dateTime rangeOfString:@"ABC" options:0 range:range];
        if (range.location != NSNotFound) {
            range = NSMakeRange(range.location + range.length, length - (range.location + range.length));
            count++;
        }
    }