入行 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 | 按照字符串裏的數字爲依據,算出順序 |
總結
雖然內容、方法很簡單,但是對於像我一樣的菜鳥來說,還是有很多能學到的地方。不單單看這一些查找、比較字符串的方法和功能,其實過程中一些查看頭文件的習慣,查資料的習慣才真的會讓我們受益無窮,獲得更好的成長。