我想为同一子字符串的两次出现创建一个具有不同属性的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:
知道查找其属性尚未设置的子字符串?
答案 0 :(得分:1)
您可以通过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属性中获取范围。
答案 1 :(得分:0)
您可以计算单词重复的时间。
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++;
}
}