iOS 查詢字符串的位置

蚓無爪牙之利,筋骨之強,上食埃土,下飲黃泉,用心一也。

前言

今天老高突然問我一個問題,查詢字符串的位置,且是所有位置。有點繞口,舉個例子:
現(xiàn)有字符串abc is abc, and abc,查找abc的所有range。

正文

首先大腦的第一反應(yīng)rangeOfString是不能實現(xiàn)的,該方法是找第一出現(xiàn)的range。于是,稍加思考,再一百度總結(jié)出下面2種方法。

  • 方法一

換個方法,使用

- (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask range:(NSRange)rangeOfReceiverToSearch;

后面2個參數(shù)

mask: 搜索方式;
rangeOfReceiverToSearch:搜索范圍;

對NSStringCompareOptions不是很了解的小伙伴可以查看筆者之前的文章 —— iOS NSStringCompareOptions。
上面的方法可以指定搜索范圍,那就遞歸改變搜索范圍方式進行搜索。整體代碼如下:

NSString *text = @"abc is abc, and abc";
NSString *searchStr = @"abc";
NSRange range = [text rangeOfString:searchStr];
while (range.location != NSNotFound || range.length != 0) {
    NSLog(@">>>1:%@", NSStringFromRange(range));
    NSUInteger hadSearchedRange = range.location + range.length;
    NSRange resetRange = NSMakeRange(hadSearchedRange, text.length - hadSearchedRange);
    range = [text rangeOfString:searchStr options:NSCaseInsensitiveSearch range:resetRange];
}

打印結(jié)果如圖1:


1.png
  • 方法二

使用NSRegularExpression,更加高級的類,里面有更加高級的api,不多嗶嗶,上代碼:

NSString *text = @"abc is abc, and abc";
NSError *error;
NSRegularExpression *regular = [[NSRegularExpression alloc] initWithPattern:@"abc"
options:NSRegularExpressionCaseInsensitive error:&error];
if (!error) {
    NSArray *results = [regular matchesInString:text options:NSMatchingReportProgress range:NSMakeRange(0,
text.length)];
    for (NSTextCheckingResult *result in results) {
        NSLog(@">>>2:%@", NSStringFromRange(result.range));
    }
}
else {
    NSLog(@"%@", error);
}

打印結(jié)果如圖2:


2.png

后記

可能還有其他種方法,以后看到后再做整理,歡迎大佬留言。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容