字符串搜索主要用于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 speak English"; NSString *str = @" "; //在str1这个字符串中搜索 ,判断有没有 if ([str1 containsString:str]) { NSLog(@"这个字符串中有 "); }
示例:
- (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循环快并且性能消耗很低。)
第三方库
一个联系人搜索库,支持的搜索方式包括:用户名汉字、拼音及模糊搜索,号码搜索,最重要的是支持T9搜索,很赞。
通过拼音去匹配汉字,简单来说,就是拼音搜索
示例: