rangeOfString 失效了

rangeOfString 失效了前言:NSString是大家最常用的一个类,几乎人人都脱离不开,它的功能非常强大,但是它其中有点奥秘直到碰到了才发现。正文:NSString的API中有一个rangeOfString:,这个也是大家常用的在字符串中查找的的Api。我一般图省事,都是用这个,很少用rangeOfString:option:正是因为偷懒,才导致了我一个crash,真是记忆深刻。下面,我先举一个例子:

前言:

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

正文:

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

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

下面,我先举一个例子:
1.png

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

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

找到了!!!!!

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

这个就得看看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 失效了分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33380.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注