【iOS】查找字符串的位置,或多关键词标红
2021-08-05 本文已影响0人
irenb
一、查找子字符串在父字符串中的位置
- 查找单个关键词的位置
NSString *string = @"美国苹果公司";
NSString *substring = @"苹果";
// rangeOfString: 默认只返回第一个关键字的位置
NSRange range = [string rangeOfString:substring];
- 查找多关键词
NSString *string = @"美国苹果公司苹果手机";
NSString *substring = @"苹果";
// 有多个关键词
NSArray *rangeArr = [self br_substringRange:substring ofString:string];
for (NSValue *rangeValue in rangeArr) {
NSRange range = [rangeValue rangeValue];
// [attributedString addAttribute:NSForegroundColorAttributeName value:keywordColor range:range];
}
#pragma mark - 方法1:查找 substring 在 string 中的位置范围
- (NSArray *)br_substringRange:(NSString *)substring ofString:(NSString *)string {
NSMutableArray *rangeArr = [[NSMutableArray alloc]init];
NSString *tempString = string;
NSInteger count = 0;
while ([tempString containsString:substring]) {
NSRange range = [tempString rangeOfString:substring];
tempString = [tempString stringByReplacingCharactersInRange:range withString:@""];
range = NSMakeRange(range.location + substring.length * count, range.length);
[rangeArr addObject:[NSValue valueWithRange:range]];
count++;
}
return [rangeArr copy];
}
#pragma mark - 方法2:查找 substring 在 string 中的位置范围
- (NSArray *)br_substringRange:(NSString *)substring ofString:(NSString *)string {
NSMutableArray *rangeArr = [[NSMutableArray alloc]init];
for (NSInteger i = 0; i < string.length - substring.length + 1; i++) {
NSString *findString = [string substringWithRange:NSMakeRange(i, substring.length)];
if ([findString isEqualToString:substring]) {
NSRange range = NSMakeRange(i, substring.length);
[rangeArr addObject:[NSValue valueWithRange:range]];
}
}
return [rangeArr copy];
}
二、多关键词标红
#pragma mark - 设置文本关键词红色显示
// 公司名称:美国<em>苹果</em>科技<em>公司</em>
- (NSAttributedString *)br_setTextKeywords:(UIColor *)keywordColor {
NSString *formatText = nil;
NSMutableAttributedString *attributedString = nil;
if ([self br_containsString:@"<em>"]) {
formatText = [[self stringByReplacingOccurrencesOfString:@"<em>" withString:@""] stringByReplacingOccurrencesOfString:@"</em>" withString:@""];
attributedString = [[NSMutableAttributedString alloc] initWithString:formatText];
NSString *tempString = self;
while ([tempString br_containsString:@"<em>"]) {
// 第一个关键词的位置
NSRange headRange = [tempString rangeOfString:@"<em>"];
NSRange footRange = [tempString rangeOfString:@"</em>"];
NSInteger keywordLocation = headRange.location;
NSInteger keywordLength = footRange.location - (headRange.location + headRange.length);
NSRange keywordRange = NSMakeRange(keywordLocation, keywordLength);
[attributedString addAttribute:NSForegroundColorAttributeName value:keywordColor range:keywordRange];
tempString = [tempString stringByReplacingCharactersInRange:footRange withString:@""];
tempString = [tempString stringByReplacingCharactersInRange:headRange withString:@""];
}
} else {
formatText = self;
attributedString = [[NSMutableAttributedString alloc] initWithString:formatText];
}
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
// 段落行间距
paragraphStyle.lineSpacing = 5.0f;
paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail; // 显示不完整,尾部显示省略号
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [formatText length])];
return [attributedString copy];
}