• iOS 查找字符串 相同 子字符串的位置 range


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

    }

    对上述的代码,有任何疑问,可以在下方留言。 也可以给我发邮件咨询:673658917@qq.com 或者是直接加qq:673658917 转载请注明出处,谢谢合作。 睡觉舒服,那是给死人准备的,加油吧,一年后你会感谢现在的自己的。
  • 相关阅读:
    Dynamics AX
    专注于领域驱动设计的研究与实践系列转载
    在C#里使用属性,如Obsolete,Serializable,XmlRoot
    SQL 2005 with(nolock)详解
    Microsoft Domain Oriented NLayered .NET 4.0 App Sample (DDD Architecture)
    使用 .NET4 中的Task优化线程池【.NET4 多核并行】
    实现简单DTO适配器,解放你的双手
    最强悍的VS插件—reSharper
    通过代码配置 Log4net
    Microsoft NLayerApp案例理论与实践–DDD、分布式DDD及其分层【转】
  • 原文地址:https://www.cnblogs.com/lishanshan/p/5726473.html
Copyright © 2020-2023  润新知