iOS 模糊、精确搜索匹配功能方法总结 By HL
阅读原文时间:2023年07月11日阅读:1

字符串搜索主要用于UITableView的搜索功能的筛选,过滤,查询

下面是一些流行的搜索查询方法

for循环

根据要求:精确搜索(判读字符串相等)   模糊搜索(字符串包含)

相关知识点

在一个字符串中搜索子字符串 rangeOfString

NSString *str1 = @"can you stest speak English";
NSString *str = @"stest";
//在str1这个字符串中搜索stest,推断有没有
if ([str1 rangeOfString:str].location != NSNotFound) {
NSLog(@"这个字符串中有stest");
}

rangeOfString 前面的參数是要被搜索的字符串,后面的是要搜索的字符
NSNotFound 表示请求操作的某个内容或者item没有发现,或者不存在

NSString *searchText = @"// Do any additional setup after loading the view, typically from a nib.";
NSRange range = [searchText rangeOfString:@"(?:[^,])*\\." options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
NSLog(@"%@", [searchText substringWithRange:range]);
}

8.0 之后,新出了一个方法:containsString

NSString *str1 = @"can you \n speak English";
NSString *str = @"\n";
//在str1这个字符串中搜索\n,判断有没有
if ([str1 containsString:str]) {
NSLog(@"这个字符串中有\n");
}

示例:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
[self searchWithText:searchText];
}

// NSLiteralSearch 区分大小写(完全比较)
// NSCaseInsensitiveSearch 不区分大小写

  • (void)searchWithText:(NSString *)text
    {
    NSString *searchText=text;
    if (searchText.length>0) {
    _searching=YES;
    [copyArray removeAllObjects];
    for (NSString *tempStr in sourceArray) {
    NSRange titleResult=[tempStr rangeOfString:searchText options:NSCaseInsensitiveSearch];
    if (titleResult.length>0) {
    [copyArray addObject:tempStr];
    }
    }
    }
    }

(用NSPredicate类写的一些搜索方法,比for循环快并且性能消耗很低。)

OC学习篇之---谓词(NSPredicate)

NSPredicate 谓词总结 数组过滤 模糊匹配

iOS开发_常用的正则表达

iOS_正则表达式

SearchCoreTest

一个联系人搜索库,支持的搜索方式包括:用户名汉字、拼音及模糊搜索,号码搜索,最重要的是支持T9搜索,很赞。

UTPinYinHelper

通过拼音去匹配汉字,简单来说,就是拼音搜索

示例:

【IOS开发】搜索和排序(好友列表,通讯录的实现,searchbar)

iOS searchbar拼音和汉字搜索全国城市