版本記錄
| 版本號(hào) | 時(shí)間 |
|---|---|
| V1.0 | 2017.06.12 |
前言
前面我簡(jiǎn)單的寫(xiě)了些NSString的初始化,寫(xiě)了幾篇,都不難,但是可以對(duì)新手有一定的小幫助,對(duì)于大神級(jí)人物可以略過(guò)這幾篇,NSString本來(lái)就沒(méi)有難的,都是細(xì)枝末節(jié),忘記了查一下就會(huì)了,沒(méi)有技術(shù)難點(diǎn),下面我們繼續(xù)~~~
1. NSString簡(jiǎn)單細(xì)說(shuō)(一)—— NSString整體架構(gòu)
2. NSString簡(jiǎn)單細(xì)說(shuō)(二)—— NSString的初始化
3. NSString簡(jiǎn)單細(xì)說(shuō)(三)—— NSString初始化
4. NSString簡(jiǎn)單細(xì)說(shuō)(四)—— 從URL初始化
5. NSString簡(jiǎn)單細(xì)說(shuō)(五)—— 向文件或者URL寫(xiě)入
6. NSString簡(jiǎn)單細(xì)說(shuō)(六)—— 字符串的長(zhǎng)度
7. NSString簡(jiǎn)單細(xì)說(shuō)(七)—— 與C字符串的轉(zhuǎn)化
8. NSString簡(jiǎn)單細(xì)說(shuō)(八)—— 識(shí)別和比較字符串
9. NNSString簡(jiǎn)單細(xì)說(shuō)(九)—— 字符串的合并
10. NSString簡(jiǎn)單細(xì)說(shuō)(十)—— 字符串的分解
11. NSString簡(jiǎn)單細(xì)說(shuō)(十一)—— 字符串的查找
12. NSString簡(jiǎn)單細(xì)說(shuō)(十二)—— 字符串的替換
13. NSString簡(jiǎn)單細(xì)說(shuō)(十三)—— 字符串的分行和分段
14. NSString簡(jiǎn)單細(xì)說(shuō)(十四)—— 字符串位置的計(jì)算
15. NSString簡(jiǎn)單細(xì)說(shuō)(十五)—— 字符串轉(zhuǎn)化為propertyList
16. NSString簡(jiǎn)單細(xì)說(shuō)(十六)—— 畫(huà)字符串
這一篇我們說(shuō)一下字符串的折疊和取兩個(gè)字符串共同的前綴。
字符串的折疊
一、- (NSString *)stringByFoldingWithOptions:(NSStringCompareOptions)options locale:(NSLocale *)locale;
我們還是先看參數(shù)
- options:這個(gè)比較參數(shù),是一個(gè)枚舉,前面說(shuō)過(guò)很多次了,這里就不多說(shuō)了,它其實(shí)就是比較的條件。
- locale:地區(qū),使用當(dāng)?shù)鼐蛡魅隱NSLocale currentLocale],使用系統(tǒng)區(qū)域就傳nil。
注意:字符折疊可以移除字母之間的區(qū)別,例如,字母折疊可以將大寫(xiě)字母替換成相應(yīng)的小寫(xiě)字母;地區(qū)參數(shù)會(huì)影響折疊邏輯,例如,在土耳其當(dāng)?shù)?,不區(qū)分字母大小寫(xiě)的比較會(huì)在 “I” to “?” (U+0131 LATIN SMALL DOTLESS I)之間進(jìn)行,而不會(huì)在“I”和正常的“i”之間進(jìn)行。
下面還是直接看代碼
/**
* 1. - (NSString *)stringByFoldingWithOptions:(NSStringCompareOptions)options locale:(NSLocale *)locale;
*
* @param options:A mask of compare flags with a suffix InsensitiveSearch.
* @param locale:The locale to use for the folding. To use the current locale, pass [NSLocale currentLocale]. To use the system locale, pass nil.
*
* @return:A string with the character folding options applied.
*
*/
NSString *str = @"AGSSHOIHOIWHOiugwigwigww398639393";
NSString *foldStr = [str stringByFoldingWithOptions:NSCaseInsensitiveSearch locale:nil];
NSLog(@"foldStr=%@",foldStr);
看輸出結(jié)果
2017-06-12 23:45:49.406 NSString你會(huì)用嗎?[1948:57118] foldStr=agsshoihoiwhoiugwigwigww398639393
結(jié)論:這里是不區(qū)分大小寫(xiě)的折疊,例子簡(jiǎn)單,但是大家可能不是很熟悉怎么去應(yīng)用。這里,大小寫(xiě)不敏感的比較和音調(diào)符號(hào)不敏感的比較都是相對(duì)復(fù)雜和昂貴的操作。如果我們需要比較很多次字符串那這就會(huì)成為一個(gè)性能上的瓶頸(例如對(duì)一個(gè)大的數(shù)據(jù)集進(jìn)行排序),一個(gè)常見(jiàn)的解決方法是同時(shí)存儲(chǔ)原始字符串和折疊字符串。例如,我們的 Contact 類有一個(gè)正常的 name 屬性,在內(nèi)部它還有一個(gè)foldedName 屬性,它將自動(dòng)在 name變化時(shí)更新。那么我們就可以使用 NSLiteralSearch 來(lái)比較 name 的折疊版本。
字符串相同的前綴
一、- (NSString *)commonPrefixWithString:(NSString *)str options:(NSStringCompareOptions)mask;
我們還是先看參數(shù)
- str:傳入的要比較的字符串,這個(gè)沒(méi)什么說(shuō)的。
- mask:這個(gè)是比較的條件,是個(gè)枚舉值,以前說(shuō)過(guò)很多次了,就不多說(shuō)了。
注意:這個(gè)方法的作用就是返回兩個(gè)字符串共同的前綴,比較的時(shí)候從二者第一個(gè)字符開(kāi)始,一直比較到第一個(gè)不相同的截止。還要注意的是,比較返回的字符串結(jié)果是基于給定的字符串,而不是要傳入的字符串,比如,如果給定的字符串是“Ma¨dchen”,而傳入的字符串是“M?dchenschule”,那么結(jié)果返回的是“Ma¨dchen”,而不是“M?dchen”。
下面我們看代碼
/**
* 1. - (NSString *)commonPrefixWithString:(NSString *)str options:(NSStringCompareOptions)mask;
*
* @param str:The string with which to compare the receiver.
* @param mask:Options for the comparison. The following search options may be specified by combining them with the C bitwise OR operator: NSCaseInsensitiveSearch, NSLiteralSearch. See String Programming Guide for details on these options.
*
* @return:A string containing characters the receiver and aString have in common, starting from the beginning of each up to the first characters that aren’t equivalent.
*
*/
NSString *str1 = @"AGSSHOIHOI";
NSString *prefixStr = [str1 commonPrefixWithString:@"AGSShWI" options:NSCaseInsensitiveSearch];
NSLog(@"prefixStr=%@",prefixStr);
看輸出結(jié)果
2017-06-13 00:06:56.152 NSString你會(huì)用嗎?[2186:72390] prefixStr=AGSSH
結(jié)論:這里我采用的比較是不區(qū)分大小寫(xiě)的比較,這里可以看到,比較結(jié)果就是基于原字符串的,而不是基于傳入的字符串參數(shù),所以這里返回的是AGSSH,而不是AGSSh。
后記
未完,待續(xù)~~,我會(huì)每天多少寫(xiě)一點(diǎn)的,謝謝?。。?/p>
