iOS 模糊、精确搜索匹配功能方法总结 By HL
字符串搜索主要用于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搜索,很赞。
iOS 模糊、精确搜索匹配功能方法总结 By HL的更多相关文章
- 基于Vuejs的搜索匹配功能
最近一直在看vue,查了很多资料,看了很多文档和博客,大概半知半解了,然后利用所理解的知识写了一个简单的搜索匹配功能. 大概长这个样子: <!DOCTYPE html> <htm ...
- HTML5 JS实现搜索匹配功能
http://www.codefans.net/jscss/code/4830.shtml <!DOCTYPE html><head><title>jQuery实现 ...
- IOS - 常用宏定义和功能方法
可能不定期添加新的东西 github地址:https://github.com/yuqingzhude/CommonUseDemo /************************Tools**** ...
- DevExpress.LookUpEdit控件实现自动搜索定位功能 兼使用方法(looUpEdit可编辑)
DevExpress.LookUpEdit 使用方法 设置可手动输入 this.LookUpEdit1.Properties.TextEditStyle = DevExpress.XtraEditor ...
- Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能
Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能. 下面是个例子: import org.junit.Test; import java. ...
- spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法
spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...
- ES中文分词器之精确短语匹配(解决了match_phrase匹配不全的问题)
分词器选择 调研了几种分词器,例如IK分词器,ansj分词器,mmseg分词器,发现IK的分词效果最好.举个例子: 词:<<是的>><span>哈<\span ...
- iOS蓝牙BLE4.0通信功能
概述 iOS蓝牙BLE4.0通信功能,最近刚学的苹果,为了实现蓝牙门锁的项目,找了一天学习了下蓝牙的原理,亲手测试了一次蓝牙的通信功能,结果成功了,那么就把我学习的东西分享一下. 详细 代码下载:ht ...
- solr入门之參考淘宝搜索提示功能优化拼音加汉字搜索功能
首先看一下从淘宝输入搜索keyword获取到的一些数据信息: 第一张:使用拼音的全程来查询 能够看到提示的是匹配的转换的拼音的方式,看最后一个提示项 这里另一个在指定分类文件夹下搜索的功能,难道后台还 ...
随机推荐
- Gradle sync failed (3 s 402 ms) - Android Studio问题解决方法
问题:Gradle同步失败 解决方法: 删除gradle-wrpper.jar中的 implementation 'com.android.support:design:30.+' 最后在Build中 ...
- docker启动emqx官方镜像,顺便启动exporter
注意,我是把把官方镜像放到了自己的仓库 1.emqx官方镜像启动 docker run -d --name emqx31 -p 1883:1883 -p 8083:8083 -p 8883:8883 ...
- Swoole 中使用异步任务
执行异步任务 (Task) # server.php $serv = new Swoole\Server("127.0.0.1", 9501); // 设置异步任务的工作进程数量 ...
- vue render中如何正确配置img的路径
第一种:适用于静态路径 attrs: { src: require('../common/images/logo.png'), title: 'img' } 第二种:适用于动态路径 domProps: ...
- Java反射详解:入门+使用+原理+应用场景
反射非常强大和有用,现在市面上绝大部分框架(spring.mybatis.rocketmq等等)中都有反射的影子,反射机制在框架设计中占有举足轻重的作用. 所以,在你Java进阶的道路上,你需要掌握好 ...
- 2.16图论专题PB
超神建图技巧合集 CF1368G 每个骨牌变成让空位移动的至多两条有向边,证明图中无环,形成森林. 然后黑白染色,两类森林互不影响.转为每次标记 A 类一棵子树与 B 类一棵子树形成的所有点对. 再转 ...
- 用js判断页面是否加载完成实现代码
方式一:window.onload: 当一个文档完全下载到浏览器中时,才会触发window.onload事件.这意味着页面上的全部元素对js而言都是可以操作的,也就是说页面上的所有元素加载完毕才会执行 ...
- 【vps】如何在vps上安装mirai机器人?
[vps]如何在vps上安装mirai机器人? 前言 由于某位师傅在群里设置了一个bot,吸引了我,所以我之前找他问了点bot的相关知识,这几天正好服务器搬迁,所以就在新服务器上再装一遍bot 1.安 ...
- 【小记录】arm64下的原子加
1.代码中使用atomic_add aarch64下面并没有任何关于atomic的头文件 编译出现错误: /Users/ahfu/code/android/android-ndk-r14b/toolc ...
- [一]Cesium利其器——Visual Studio Code
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ IDE Web前端刚入门的朋友,常常想选择一个快速.好用.流行( ...