问题:解决替换同一个字符串的多个相同的字符eg.

xxx这个超级大土豪白送xxx一个!赶快来抢把!

将第一个xxx换成名字

将第二个xxx换成物品

两种办法    第二种办法更灵活一点

//第一种办法简单粗暴(思路获取第一次xxx出现的位置然后替换成名字 替换之后string中就只有一个xxx了  然后用物品替换string中仅有的一个xxx)

//        NSRange range = [share6 rangeOfString:@"xxx"];//获取第一次出现的位置

//        share6 = [share6 stringByReplacingCharactersInRange:range withString:_m_dataDic[@"nickName"]];

//        share5 = [share5 stringByReplacingCharactersInRange:range withString:_m_dataDic[@"nickName"]];

//        shareContent = [[_m_dataDic[@"gender"]integerValue] == 1?share5:share6 replace:@"xxx" withString:((!_m_dataDic[@"content"] || [_m_dataDic[@"content"] isKindOfClass:[NSNull class]])?@"顺风车":_m_dataDic[@"content"])];

//第二种方法(思路 首先遍历这个字符串 然后找到所有的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;

}

最新文章

  1. C++常考面试题汇总
  2. .Net使用Redis详解之ServiceStack.Redis(七)
  3. 简单的mysql查询
  4. [强连通分量] POJ 2186 Popular Cows
  5. 带有×的EditText
  6. iOS 重力感应 学习1 陀螺仪 水平仪 指南针
  7. jquery 字符串转json
  8. 计算几何(容斥原理,圆交):HDU 5120 Intersection
  9. fineuploader 上传jquery 控件
  10. Docker网络代理设置
  11. 重回博客 谈一谈Node中的异步和单线程
  12. SpringMVC之拦截器实现登录验证
  13. Cookie与 Session使用详解
  14. javascript小记五则:用JS写一个图片左右自由滚动的“跑马灯”效果
  15. C++版 - LeetCode 145: Binary Tree Postorder Traversal(二叉树的后序遍历,迭代法)
  16. Spring Cloud Stream如何处理消息重复消费?
  17. Loj 103、10043 (KMP统计子串个数)
  18. 机器学习与Tensorflow(4)——卷积神经网络与tensorflow实现
  19. 解决Idea运行testng套件无testoutput文件夹问题
  20. 利用CSS 修改input=radio的默认样式(改成选择框)

热门文章

  1. Android项目开发全程(一)--创建工程
  2. 【原】Scala学习资料
  3. 全面产品管理-从细微处认识"用户体验"
  4. javascript设计模式2
  5. HW3.8
  6. 利用gdb 调试android jni c动态库
  7. vue相关
  8. spring的有状态BEAN和无状态BEAN
  9. Sigar.jar获取系统信息
  10. Spring 3.0 注解注入详解