字符串搜索主要用於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循環快並且性能消耗很低。)
第三方庫
一個聯系人搜索庫,支持的搜索方式包括:用戶名漢字、拼音及模糊搜索,號碼搜索,最重要的是支持T9搜索,很贊。
通過拼音去匹配漢字,簡單來說,就是拼音搜索
示例: