iOS 模糊、精确搜索匹配功能方法总结 By HL

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

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

一.遍历搜索

for循环

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

相关知识点

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

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

 

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

1
2
3
4
5
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

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

 

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [self searchWithText:searchText];
}<br>
// NSLiteralSearch 区分大小写(完全比较)<br>// 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

 

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

 

posted @   sixindev  阅读(10271)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示