iOS從0到1| OC 中如何檢查一個字符串 string 是否包含另一個 string

入行 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 按照字符串裏的數字爲依據,算出順序

總結

雖然內容、方法很簡單,但是對於像我一樣的菜鳥來說,還是有很多能學到的地方。不單單看這一些查找、比較字符串的方法和功能,其實過程中一些查看頭文件的習慣,查資料的習慣才真的會讓我們受益無窮,獲得更好的成長。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章