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