iOS从0到1| OC 中如何检查一个字符串 string 是否包含另一个 string

2018-12-212568

入行 iOS 开发不久,看书过后,做了一个练习——如何在检查一个字符串中是否包含另一个字符串呢?带着疑问,多方查资料加求助,整合了一些简单的方法,与各位猿们交流交流。

作为一个程序猿幼崽,想问题自然比较直白无脑,看到这个题目脑子里肯定会先捕捉到一个词“是否”,进而就会拿 if 语法做文章(后来总结发现很多方法都用到 if else 语句,又暗自为自己想对了方向庆幸了一波)...

接下来是第一个方法:

iOS 8OS X 10.10 (Yosemite) 增加了 - (BOOL)containsString:(NSString *)str 这个方法,用这个方法来检索包含字符串还是很简单方便的( XCode 中头文件里的方法解释都直接这样说了:D)。

或者:

其实改成这样更简洁。省去 if else 语句和打印。在调试器 Debugger 输出 1 就是包含了对应字符串,0 则不包含。

第二个方法:

本着菜鸟的探究精神,发现 NSString.h 中还有一个查找字符串中是否包含字符串的方法 - (NSRange)rangeOfString:(NSString *)searchString; 迫不及待试了一下,果然事情没那么顺利,出现了报错:

提示的是类型不符。 command 加左键点击方法进去,然后看返回的类型 NSRange 是什么类型,发现 NSRange 是一个结构体

原来如此!有两个属性,我就先选择了比较好理解的 length ,既然是属性,那我们就可以用这个方法把 length 点出来,返回的是一个长度数值,这样就能对应 == 右边的 int 类型了。

这样就解决啦。

测试了一个 .length 可行,接下来就到 location 了。同样,它也是可以用点方法的,我们将 .length 替换为 .location ,它可以标示字符串所在位置(或可理解为起始位置),我们用 NSNotFound 来判断是否存在检索的字符串( NSNotFound 表示请求操作的某个内容或者 item 没有发现,或者不存在):

一个拓展:

我们可以为 - (NSRange)rangeOfString:(NSString *)searchString; 添加一些搜索的 options ,例如 - (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask;
举个栗子:

其他的还有:

options: 说明
NSCaseInsensitiveSearch 不区分大小写比较
NSLiteralSearch 区分大小写比较
NSAnchoredSearch 搜索限制范围的字符串
NSDiacriticInsensitiveSearch 忽略 "-" 符号的比较
NSWidthInsensitiveSearch 忽略字符串的长度,比较出结果
NSForcedOrderingSearch 忽略不区分大小写比较的选项
NSBackwardsSearch 从字符串末尾开始搜索
NSNumericSearch 按照字符串里的数字为依据,算出顺序

总结

虽然内容、方法很简单,但是对于像我一样的菜鸟来说,还是有很多能学到的地方。不单单看这一些查找、比较字符串的方法和功能,其实过程中一些查看头文件的习惯,查资料的习惯才真的会让我们受益无穷,获得更好的成长。

分享
点赞1
打赏
上一篇:iOS 中 Widget 的实现 | 实战系列
下一篇:Xcode工具详解