ios 开发中获取字符串中重复的字符的range

iOS 开发中经常会遇到处理字符串的问题,对于一个字符串经常会遇见里面包含重复的字符需要对重复的字符进行处理,下面的代码就是对重复字符进行处理的操作,具体代码如下所示:

/**

 *  返回重复字符的location

 *

 *  @param text     初始化的字符串

 *  @param findText 查找的字符

 *

 *  @return 返回重复字符的location

 */

- (NSMutableArray *)getRangeStr:(NSString *)text findText:(NSString *)findText {

    NSMutableArray *arrayRanges = [NSMutableArray arrayWithCapacity:20];

    if (findText == nil && [findText isEqualToString:@""]) {

        return nil;

    }

    NSRange rang = [text rangeOfString:findText];

    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) {

                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);

            }

            rang1 = [text rangeOfString:findText options:NSCaseInsensitiveSearch range:rang1];

            if (rang1.location == NSNotFound && rang1.length == 0) {

                break;

            }else

                [arrayRanges addObject:[NSNumber numberWithInteger:rang1.location]];

        }

        return arrayRanges;

    }

    return nil;

}




在开发中,如果遇到遍历不同字符串在字符串中的位置,可能有重复可能没有重复,为了避免重复遍历对字符串设置。。。需要设置一个全局字典,将要查的字符串加进数组中,第二次同样的字符串进入getRangeStr的时候,如果数组中包含这个字符串,直接return。

如下:

/**

 *  返回重复字符的location

 *

 *  @param text     初始化的字符串

 *  @param findText 查找的字符

 *

 *  @return 返回重复字符的location

 */


- (NSMutableArray *)getRangeStr:(NSString *)text findText:(NSString *)findText {

    if ([self.findTextArr containsObject:findText]) {// 避免重复查找同样的字符串

        return nil;

    }

    [self.findTextArr addObjectSafe:findText];

    NSMutableArray *arrayRanges = [NSMutableArray arrayWithCapacity:20];

    if (findText == nil && [findText isEqualToString:@""]) {

        return nil;

    }

    NSRange rang = [text rangeOfString:findText];

    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) {

                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);

            }

            rang1 = [text rangeOfString:findText options:NSCaseInsensitiveSearch range:rang1];

            if (rang1.location == NSNotFound && rang1.length == 0) {

                break;

            }else

                [arrayRanges addObject:[NSNumber numberWithInteger:rang1.location]];

        }

        return arrayRanges;

    }

    return nil;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值