博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 查找字符串 相同 子字符串的位置 range
阅读量:5287 次
发布时间:2019-06-14

本文共 2401 字,大约阅读时间需要 8 分钟。

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

}

转载于:https://www.cnblogs.com/lishanshan/p/5726473.html

你可能感兴趣的文章
LeetCode Length of Last Word
查看>>
Kafka 学习笔记
查看>>
解决Flash和html在多标签浏览器中互访问题
查看>>
(转)菜鸟去重复之Sql
查看>>
[LeetCode] First Bad Version
查看>>
Java面向对象编程之异常处理机制
查看>>
虚拟存储管理
查看>>
Loj10222 佳佳的Fibonacci(矩阵乘法)
查看>>
springboot集成quartz实现任务调度
查看>>
剑指offer——重建二叉树
查看>>
二叉树——在二叉树中找到一个节点的前驱节点
查看>>
8.Java语言基础:函数
查看>>
从前端接收时间类型,要在实体类中加上@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")注解...
查看>>
移动cell的位置
查看>>
iTOP-iMX6UL全能板-linux-usb-wifi的使用
查看>>
Django学习---笔记一
查看>>
树莓派开发板入门学习笔记2:[转]树莓派系统在VM中能做什么
查看>>
从编译器源代码中提取ARMv8的指令编码
查看>>
2017前端面试题之Js篇(1)
查看>>
TRichTextBox – A universal RichTextBox which can display animated images and more
查看>>