Last active
August 1, 2019 05:22
-
-
Save hanfengs/5eff2e8e083ecfd9f4432f6128791793 to your computer and use it in GitHub Desktop.
[获取字符串中多个相同字符的位置index]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma mark - 获取这个字符串ASting中的所有abc的所在的index | |
- (NSMutableArray *)getRangeStr:(NSString *)text findText:(NSString *)findText | |
{ | |
NSMutableArray *arrayRanges = [NSMutableArray arrayWithCapacity:3]; | |
if (findText == nil && [findText isEqualToString:@""]) | |
{ | |
return nil; | |
} | |
NSRange rang = [text rangeOfString:findText]; //获取第一次出现的range | |
if (rang.location != NSNotFound && rang.length != 0) | |
{ | |
[arrayRanges addObject:[NSNumber numberWithInteger:rang.location]];//将第一次的加入到数组中 | |
NSRange rang1 = {0,0}; | |
NSInteger location = 0; | |
NSInteger length = 0; | |
for (int i = 0;; i++) | |
{ | |
if (0 == i) | |
{ | |
//去掉这个abc字符串 | |
location = rang.location + rang.length; | |
length = text.length - rang.location - rang.length; | |
rang1 = NSMakeRange(location, length); | |
} | |
else | |
{ | |
location = rang1.location + rang1.length; | |
length = text.length - rang1.location - rang1.length; | |
rang1 = NSMakeRange(location, length); | |
} | |
//在一个range范围内查找另一个字符串的range | |
rang1 = [text rangeOfString:findText options:NSCaseInsensitiveSearch range:rang1]; | |
if (rang1.location == NSNotFound && rang1.length == 0) | |
{ | |
break; | |
} | |
else//添加符合条件的location进数组 | |
[arrayRanges addObject:[NSNumber numberWithInteger:rang1.location]]; | |
} | |
return arrayRanges; | |
} | |
return nil; | |
} | |
//第一种办法简单粗暴(思路获取第一次xxx出现的位置然后替换成名字 替换之后string中就只有一个xxx了 然后用物品替换string中仅有的一个xxx) | |
// 实际数据中,$$apple$$,对下划线提问,用第一种简单粗暴的办法 | |
//第二种方法(思路 首先遍历这个字符串 然后找到所有的xxx 所在的位置的index 然后通过index将字符串进行替换) | |
NSMutableArray *arrayShare = [self getRangeStr:share6 findText:@"xxx"]; | |
shareContent = [[_m_dataDic[@"gender"]integerValue] == 1?share5:share6 stringByReplacingCharactersInRange:NSMakeRange([arrayShare[1]integerValue], 3) withString:((!_m_dataDic[@"content"] || [_m_dataDic[@"content"] isKindOfClass:[NSNull class]])?@"顺风车":_m_dataDic[@"content"])]; | |
shareContent = [shareContent stringByReplacingCharactersInRange:NSMakeRange([arrayShare[0]integerValue], 3) withString:_m_dataDic[@"nickName"]]; | |
//获取这个字符串中的所有xxx的所在的index | |
- (NSMutableArray *)getRangeStr:(NSString *)text findText:(NSString *)findText | |
{ | |
NSMutableArray *arrayRanges = [NSMutableArray arrayWithCapacity:20]; | |
if (findText == nil && [findText isEqualToString:@""]) { | |
return nil; | |
} | |
NSRange rang = [text rangeOfString:findText]; //获取第一次出现的range | |
if (rang.location != NSNotFound && rang.length != 0) { | |
[arrayRanges addObject:[NSNumber numberWithInteger:rang.location]];//将第一次的加入到数组中 | |
NSRange rang1 = {0,0}; | |
NSInteger location = 0; | |
NSInteger length = 0; | |
for (int i = 0;; i++) | |
{ | |
if (0 == i) {//去掉这个xxx | |
location = rang.location + rang.length; | |
length = text.length - rang.location - rang.length; | |
rang1 = NSMakeRange(location, length); | |
}else | |
{ | |
location = rang1.location + rang1.length; | |
length = text.length - rang1.location - rang1.length; | |
rang1 = NSMakeRange(location, length); | |
} | |
//在一个range范围内查找另一个字符串的range | |
rang1 = [text rangeOfString:findText options:NSCaseInsensitiveSearch range:rang1]; | |
if (rang1.location == NSNotFound && rang1.length == 0) { | |
break; | |
}else//添加符合条件的location进数组 | |
[arrayRanges addObject:[NSNumber numberWithInteger:rang1.location]]; | |
} | |
return arrayRanges; | |
} | |
return nil; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment