问题:解决替换同一个字符串的多个相同的字符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;

}

iOS 查找字符串 相同 子字符串的位置 range的更多相关文章

  1. Swift3.0语言教程查找字符集和子字符串

    Swift3.0语言教程查找字符集和子字符串 Swift3.0语言教程查找字符集和子字符串,在字符串中当字符内容很多时,我们就需要使用到查找字符集或者子字符串的方法.以下我们将讲解3种查找字符集和子字 ...

  2. python--基础学习(四)自然字符串、重复字符串、子字符串

    python系列均基于python3.4环境 1.自然字符串和重复字符串 代码示例: str1=r'hello \npython' str2='hello \npython' str3="h ...

  3. Java SE之String,字符串和子字符串的存储与区别

    理解String 是怎么占用内存的       来看一个每个String对象的各个属性,一个String包括如下的属性: 一个char数组(是个独立的对象用来存储字符串中的字符) 一个int 的off ...

  4. Java-从一个字符串获取子字符串

    substring函数 package com.tj; public class MyClass implements Cloneable { public static void main(Stri ...

  5. Swift3.0语言教程替换子字符串

    Swift3.0语言教程替换子字符串 Swift3.0语言教程替换子字符串,替换子字符串其实就是将字符串中的子字符串删除,然后再进行添加.为了让这一繁琐的过程变的简单,NSString提供了替换子字符 ...

  6. [LeetCode] Unique Substrings in Wraparound String 封装字符串中的独特子字符串

    Consider the string s to be the infinite wraparound string of "abcdefghijklmnopqrstuvwxyz" ...

  7. C#LeetCode刷题之#459-重复的子字符串(Repeated Substring Pattern)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3945 访问. 给定一个非空的字符串,判断它是否可以由它的一个子串 ...

  8. [Swift]扩展String类:实现find()查找子字符串在父字符串中的位置

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  9. 数据结构与算法--KMP算法查找子字符串

    数据结构与算法--KMP算法查找子字符串 部分内容和图片来自这三篇文章: 这篇文章.这篇文章.还有这篇他们写得非常棒.结合他们的解释和自己的理解,完成了本文. 上一节介绍了暴力法查找子字符串,同时也发 ...

随机推荐

  1. 【HTML】Beginner8:Table

    1.Table     Abused to lay out pages    The correct use for tables is to do exactly what you would ex ...

  2. linux驱动程序之电源管理之regulator机制流程 (1)

    电源管理芯片可以为多设备供电,且这些设备电压电流有所同.为这些设备提供的稳压器代码模型即为regulator. 下面通过下面三个过程分析regulartor供电机制: 1.分析regulator结构体 ...

  3. Esper系列(五)Order by、Limit、构建事件流、Updating an Insert Stream

    Order by 与SQL语法类似类似,默认为升序排列; 注意: 如果order by的子句中出现了聚合函数,那么该聚合函数必须出现在select的子句中. 出现在select中的expression ...

  4. 安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法

    ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor':/home/king/php-5.2.13/ext/iconv/ ...

  5. php tcp socket 学习汇总

    推荐实例:PHP socket 深入浅出讲解:php的socket通信 基于socket.io的实时消息推送 php socket通信(tcp/udp) PHP向socket服务器收发数据 php实现 ...

  6. Video Surveillance - POJ 1474(判断是否存在内核)

    题目大意:询问是否在家里装一个监视器就可以监控所有的角落. 分析:赤裸裸的判断多边形内核题目. 代码如下: #include<iostream> #include<string.h& ...

  7. http 2.0

    http2.0  待学习整理 http://www.zhihu.com/question/34074946

  8. HDU 1518 Square

    解题思路:sum%4!=0    , max<sum/4 #include<iostream>#include<cstdio>#include<cstring> ...

  9. Sigar.jar获取系统信息

    Sigar是Hyperic-hq产品的基础包,是Hyperic HQ主要的数据收集组件. 它用来从许多平台收集系统和处理信息,这些平台包括:Linux, Windows, Solaris, AIX, ...

  10. Ubuntu 12.04 分区方案(仅供参考)

    Ubuntu 12.04 分区方案(仅供参考)   总空间大小:50G 目录 建议大小 实际大小 格式 描述 / 10G~20G 10G ext4 根目录 swap <2048M 1G swap ...