Foundation - NSCharacterSet

我目前使用過的場景:

1、可以用來處理url上的特殊字符

工作記錄 - URL編碼,特殊字符處理

2、可以用來限制文本輸入框的內(nèi)容,比如只運(yùn)行輸入數(shù)字類型

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSCharacterSet *charSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
    NSString *filteredStr = [[string componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@""];
    if ([string isEqualToString:filteredStr]) {
        return YES;
    }
    return NO;
}

[一] NSCharacterSet是什么?

NSCharacterSet類似一個(gè)字符串處理工具類

1.1 先來看下面的例子:

需求: 有一個(gè)字符串:@"今天我們來學(xué)習(xí)NSCharacterSet我們快樂",去除字符串中所有的@"今"@"我"、@"s"。

【注意】s是小寫
思考:如果是你怎么解決?

  1. 自己寫。
  2. NSCharacterSet
1.1.1 自己寫,如下:
   NSString *str = @"今天我們來學(xué)習(xí)NSCharacterSet我們快樂";
    NSString *str1 = @"我s今";
    NSMutableString *resultStr = [[NSMutableString alloc]init];
    for (int i = 0; i < str.length; i++) {
        NSString *indexStr = [str substringWithRange:NSMakeRange(i, 1)];
        if (![str1 containsString:indexStr]) {
            [resultStr appendString:indexStr];
        }
    }

    NSLog(@"自己寫---%@",resultStr);

   //2016-12-23 13:19:42.584 PPDemos[9065:6978391] 自己寫---天們來學(xué)習(xí)NSCharacterSet們快樂

1.1.2 用 NSCharacterSet,如下:
    NSString *str = @"今天我們來學(xué)習(xí)NSCharacterSet我們快樂";
    NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"我s今"];
    NSArray *setArr = [str componentsSeparatedByCharactersInSet:characterSet];
    NSString *resultStr1 = [setArr componentsJoinedByString:@""];
    NSLog(@"拆分后的字符串?dāng)?shù)組------%@\n最終字符串------%@",setArr,resultStr1);

總結(jié): 至此,通過上面的兩個(gè)方法,已經(jīng)解決了需求的問題。通過自己寫,結(jié)合用NSCharacterSet,可以推斷出NSCharacterSet類似一個(gè)字符串處理工具類,而事實(shí)上,由名字也可以看出,它確實(shí)是!


[二] NSCharacterSet的常用API學(xué)習(xí)

/** 001 根據(jù)一個(gè)給定的字符串獲取一個(gè)NSCharacterSet對(duì)象 */
+ (NSCharacterSet *)characterSetWithCharactersInString:(NSString *)aString;

// 使用實(shí)例,如上例!!

/** 002 相反字符串限制 【具體見接下的例子】 */
@property (readonly, copy) NSCharacterSet *invertedSet;

/** 003 常用快捷方法集合 (常用的,已滿足大多數(shù)需求) */
 + controlCharacterSet
 + whitespaceCharacterSet              //空格
 + whitespaceAndNewlineCharacterSet    //空格和換行符
 + decimalDigitCharacterSet            //0-9的數(shù)字
 + letterCharacterSet                  //所有字母
 + lowercaseLetterCharacterSet         //小寫字母
 + uppercaseLetterCharacterSet         //大寫字母
 + alphanumericCharacterSet            //所有數(shù)字和字母(大小寫不分)
 + punctuationCharacterSet             //標(biāo)點(diǎn)符號(hào)
 + newlineCharacterSet                 //換行

002 的 例子
    NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    NSString *str = @"7sjf78sf990s";
    NSLog(@"set----%@",[str componentsSeparatedByCharactersInSet:set]);

    NSCharacterSet *invertedSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
    NSLog(@"invertedSet----%@",[str componentsSeparatedByCharactersInSet:invertedSet]);

 //打印結(jié)果如下圖:  【可以看出invertedSet后,剛好判斷條件相反】 

屏幕快照 2017-12-14 17.53.56.png

明白了001002,下面有個(gè)需求,該怎么實(shí)現(xiàn)?自己想吧!

需求:textFielf只能輸入數(shù)字

[三] NSMutableCharacterSet的常用API學(xué)習(xí)

NSCharacterSet的,NSMutableCharacterSet都可以用?!具@句貌似有些多余】。

/** 工能同 invertedSet 方法一樣,注意這個(gè)沒有返回值 */
- (void)invert;

textFielf只能輸入數(shù)字的答案,如下

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSCharacterSet *charSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
    NSString *filteredStr = [[string componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@""];
    if ([string isEqualToString:filteredStr]) {
        return YES;
    }
    return NO;
}

鏈接:http://www.itdecent.cn/p/5fb58dc73e7b
來源:簡書
http://blog.csdn.net/wangyanchang21/article/details/53415650

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,115評(píng)論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,591評(píng)論 19 139
  • 前段時(shí)間跟一位朋友聊天的時(shí)候,聊到了她人生中的三次覺醒和成長,第一次,是她在研二期間,那段孤獨(dú)的讀研時(shí)光她讀了20...
    三三先生閱讀 714評(píng)論 0 4
  • 早上起床時(shí),麻靜叨叨著說,今天都已經(jīng)20號(hào)了,我那時(shí)候剛從床上爬下來,由于前一晚沒有睡好,隨口接了一句:就是啊,轉(zhuǎn)...
    想吐的小番茄閱讀 378評(píng)論 0 1
  • 閑了一天吧 晚上改了簡歷 希望太古趕緊約我啊 5.27你們上班不
    角落蜷縮閱讀 122評(píng)論 0 0

友情鏈接更多精彩內(nèi)容