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

蘆葦科技App技術團隊發表於2018-12-21

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

入行 iOS 開發不久,看書過後,做了一個練習——如何在檢查一個字串中是否包含另一個字串呢?帶著疑問,多方查資料加求助,整合了一些簡單的方法,與各位猿們交流交流。

作為一個程式猿幼崽,想問題自然比較直白無腦,看到這個題目腦子裡肯定會先捕捉到一個詞“是否”,進而就會拿 if 語法做文章(後來總結髮現很多方法都用到 if else 語句,又暗自為自己想對了方向慶幸了一波)...

接下來是第一個方法:

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

iOS 8OS X 10.10 (Yosemite) 增加了 - (BOOL)containsString:(NSString *)str 這個方法,用這個方法來檢索包含字串還是很簡單方便的( XCode 中標頭檔案裡的方法解釋都直接這樣說了:D)。

或者:

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

其實改成這樣更簡潔。省去 if else 語句和列印。在偵錯程式 Debugger 輸出 1 就是包含了對應字串,0 則不包含。

第二個方法:

本著菜鳥的探究精神,發現 NSString.h 中還有一個查詢字串中是否包含字串的方法 - (NSRange)rangeOfString:(NSString *)searchString; 迫不及待試了一下,果然事情沒那麼順利,出現了報錯:

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

提示的是型別不符。 command 加左鍵點選方法進去,然後看返回的型別 NSRange 是什麼型別,發現 NSRange 是一個結構體

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

原來如此!有兩個屬性,我就先選擇了比較好理解的 length ,既然是屬性,那我們就可以用這個方法把 length 點出來,返回的是一個長度數值,這樣就能對應 == 右邊的 int 型別了。

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

這樣就解決啦。

測試了一個 .length 可行,接下來就到 location 了。同樣,它也是可以用點方法的,我們將 .length 替換為 .location ,它可以標示字串所在位置(或可理解為起始位置),我們用 NSNotFound 來判斷是否存在檢索的字串( NSNotFound 表示請求操作的某個內容或者 item 沒有發現,或者不存在):

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

一個擴充:

我們可以為 - (NSRange)rangeOfString:(NSString *)searchString; 新增一些搜尋的 options(條件) ,例如 - (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask;
舉個栗子:

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

其他的還有:

options: 說明
NSCaseInsensitiveSearch 不區分大小寫比較
NSLiteralSearch 區分大小寫比較
NSAnchoredSearch 搜尋限制範圍的字串
NSDiacriticInsensitiveSearch 忽略 "-" 符號的比較
NSWidthInsensitiveSearch 忽略字串的長度,比較出結果
NSForcedOrderingSearch 忽略不區分大小寫比較的選項
NSBackwardsSearch 從字串末尾開始搜尋
NSNumericSearch 按照字串裡的數字為依據,算出順序

總結

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

相關文章