遞歸搜尋NSString中重復的文本

效果

源碼
https://github.com/YouXianMing/iOS-Project-Examples 中的StringRange項目
// // NSString+Range.h // NSString // // Created by YouXianMing on 16/5/22. // Copyright © 2016年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> @interface NSString (Range) /** * Finds and returns the ranges of a given string, within the given range of the receiver. * * @param searchString searchString. * @param mask A mask specifying search options. The following options may be specified by combining them with the C bitwise OR operator: NSCaseInsensitiveSearch, NSLiteralSearch, NSBackwardsSearch, NSAnchoredSearch. See String Programming Guide for details on these options. * @param range serachRange. * * @return Ranges. */ - (NSArray <NSValue *> *)rangesOfString:(NSString *)searchString options:(NSStringCompareOptions)mask serachRange:(NSRange)range; @end
//
// NSString+Range.m
// NSString
//
// Created by YouXianMing on 16/5/22.
// Copyright © 2016年 YouXianMing. All rights reserved.
//
#import "NSString+Range.h"
@implementation NSString (Range)
- (NSArray <NSValue *> *)rangesOfString:(NSString *)searchString options:(NSStringCompareOptions)mask serachRange:(NSRange)range {
NSMutableArray *array = [NSMutableArray array];
[self rangeOfString:searchString range:NSMakeRange(0, self.length) array:array options:mask];
return array;
}
- (void)rangeOfString:(NSString *)searchString
range:(NSRange)searchRange
array:(NSMutableArray *)array
options:(NSStringCompareOptions)mask {
NSRange range = [self rangeOfString:searchString options:mask range:searchRange];
if (range.location != NSNotFound) {
[array addObject:[NSValue valueWithRange:range]];
[self rangeOfString:searchString
range:NSMakeRange(range.location + range.length, self.length - (range.location + range.length))
array:array
options:mask];
}
}
@end