前言:

NSString是大家最常用的一个类,几乎人人都脱离不开,它的功能非常强大,但是它其中有点奥秘直到碰到了才发现。

正文:

NSString的API中有一个rangeOfString:,这个也是大家常用的在字符串中查找的的Api。我一般图省事,都是用这个,很少用rangeOfString:option:

正是因为偷懒,才导致了我一个crash,真是记忆深刻。

下面,我先举一个例子:

明明有一个":",结果就是找不到.这样导致了我以后代码出现的crash。这次不是说这个crash,而是要找到原因,为啥这个":",找不到呢。

打印一下length,竟然是2。那为啥找不到呢.换一种方式:

找到了!!!!!

问题解决了,但是为啥会这样呢?

这个就得看看Unicode的构成了。

Unicode对于组成有两种形式:合成形式与分解形式。

而NSString的rangeOfString,这个api对此的支持是这样的。rangeOfString,默认不是按照码元来查找的,也就是不是按照literalSearch.虽然它里面包含":",但是,这两个字符可以合成另一个与其等价的字符,所以就找不到了。

合成字符有的在Unicode字符表中有对应的形式,有的没有。我举得例子就没有。这得根据各种字符的具体规则定义,比如字符+西里尔字母,就能组出很多种奇怪的字符。

提醒:

如果要在NSString查找字符,一定要带上option。因为NSString与Unicode还是有很多坑的。

最后,推荐几篇写的比较好的文章,介绍NSString与Unicode的。

http://objccn.io/issue-9-1/

http://blog.swanspace.org/ramble_unicode/

rangeOfString 失效了相关推荐

  1. @Transactional注解最容易忽视的三个失效场景!

    @Transactional注解在以下场景中使用,是会失效的,切记! 1.非public方法 spring对注解事务的方法进行校验,修饰符是不是public,不是 public则不会获取@Transa ...

  2. ASP.NET 4.0: 请求验证模式变化导致ValidateRequest=false失效

    ASP.NET请求验证功能可以给我提供应用程序的安全保证,避免站点受到XSS的攻击.但是在一些情况下,我们需要禁用这个功能,比如我们需要使用HtmlEditor来让用户输入一些HTML文本,这时候AS ...

  3. Bqq服务器的缓存文件放什么目录,如何使文件系统缓存失效? - How to invalidate the file system cache? - 开发者知识库...

    30 At least on Windows 7, it seems that attempting to open a volume handle without FILE_SHARE_WRITE ...

  4. vscode 格式化某一段代码_VSCode格式化代码功能失效的bug解决方法

    VSCode格式化代码功能失效的bug解决方法 前不久我装上了 黑苹果,那么为了快速转移开发环境,我使用了VSCode(Visual Studio Code下面简称VSCode)的插件 Setting ...

  5. MSP430低功耗模式-while循环失效

    如下代码实现MSP430G2553单片机两个led交替闪烁 #include <msp430.h> /*** main.c*/ int main(void) {WDTCTL = WDTPW ...

  6. Maven国内源设置 - OSChina国内源失效了,别更新了

    Maven国内源设置 - OSChina国内源失效了,别更新了 原文:http://blog.csdn.net/chwshuang/article/details/52198932 最近在写一个Spr ...

  7. alias重启终端失效的问题

    如果使用命令 alias xx='xxxx' 那么登出以后,别名就会失效.下次登入的时候就不能用了. 为了保持别名可以把它写入.bashrc 在.bashrc的最后写入想要的别名,比如 alias z ...

  8. 【Windows】清除win10开始菜单中失效打程序标签

    1.问题描述 安装新版本Qt程序,卸载旧版本Qt后,在开始菜单中,还有残留,但是已经失效,需要删除这些失效的程序标签. 2.显示隐藏文件夹 打开此电脑--查看--勾选"隐藏项目": ...

  9. 【Qt】在QtCreator中使用Ctrl+Shift+f快捷键打开高级查找窗口失效的解决方法

    1.问题描述 Win10操作系统环境下,在QtCreator中使用Ctrl+Shift+f快捷键打开高级查找窗口失效. 2.原因分析 Ctrl+Shift+f快捷键在各种输入法中,常用来做中文简体和繁 ...

最新文章

  1. 对话AI大师Bengio:AI不应变成军备竞赛
  2. SPOJ 130 - Rent your airplane and make money(dp+优化)
  3. labview在2048中添加时间滚动条_Axure 教程:不可见滚动条的页面滚动效果
  4. SQL读取树型所有下级或所有上级
  5. hue 添加jar_在hue下配置jdbc驱动
  6. 使用postman和SAP C4C OData服务创建销售订单
  7. OpenJDK8基础类库包清单
  8. hive cli启动判断hadoop version的问题
  9. Python爬虫高阶:微店混淆逆向解密
  10. 如何安装SQL2005 EXPRESS版
  11. 数学分析(9): 不定积分
  12. 机器学习算法——神经网络6(SOM网络)
  13. Windows下编译apr、apr-util
  14. 微信小程序开发之视频video组件报错:渲染层网络层错误
  15. margin的百分比参照物
  16. MySQL LEFT函数的使用
  17. GitHub 上100个优质前端项目整理,非常全面!
  18. 【线性代数】P1 行列式基本概念
  19. Android 仿QQ登录动态背景
  20. Serial Programming HOWTO

热门文章

  1. 申请TexturePacker序列号
  2. 前端学习日志-4-js
  3. 关于jsp中java代码的使用;
  4. lmdb文件的读取和保存
  5. 常见损失函数 损失函数选择方法
  6. 【JS】JSON.stringify( )
  7. 网页设计排版中哪些元素最重要?
  8. openoffice jodconverter 文档转换pdf过坑记录
  9. 【常见 Error Bug】Vivado仿真报错 ERROR: [XSIM 43-3322] 解决方法
  10. 非必要千万不要改C盘用户名!!!