Skip to content

Instantly share code, notes, and snippets.

@hanfengs
Last active August 1, 2019 05:22
Show Gist options
  • Save hanfengs/5eff2e8e083ecfd9f4432f6128791793 to your computer and use it in GitHub Desktop.
Save hanfengs/5eff2e8e083ecfd9f4432f6128791793 to your computer and use it in GitHub Desktop.
[获取字符串中多个相同字符的位置index]
#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