入行 iOS 开发不久,看书过后,做了一个练习——如何在检查一个字符串中是否包含另一个字符串呢?带着疑问,多方查资料加求助,整合了一些简单的方法,与各位猿们交流交流。
作为一个程序猿幼崽,想问题自然比较直白无脑,看到这个题目脑子里肯定会先捕捉到一个词“是否”,进而就会拿 if 语法做文章(后来总结发现很多方法都用到 if else 语句,又暗自为自己想对了方向庆幸了一波)...
接下来是第一个方法:
iOS 8 和 OS 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 | 按照字符串里的数字为依据,算出顺序 |
总结
虽然内容、方法很简单,但是对于像我一样的菜鸟来说,还是有很多能学到的地方。不单单看这一些查找、比较字符串的方法和功能,其实过程中一些查看头文件的习惯,查资料的习惯才真的会让我们受益无穷,获得更好的成长。