學會NSCharacterSet,再也不怕各種字符串處理!!

推薦一下: iOS鏈式創(chuàng)建UI終結者 ? PPMaker


[PP贈語]:Anything you're good at contributes to happiness.

追求視覺,請移步這里

[一] NSCharacterSet是什么?

1.1 先來看下面的例子:

需求: 有一個字符串:@"今天我們來學習NSCharacterSet我們快樂",去除字符串中所有的@"今"、@"我"@"s"。
【注意】s是小寫

思考:如果是你怎么解決?

  1. 自己寫。
  2. NSCharacterSet。
1.1.1 自己寫,如下:
   NSString *str = @"今天我們來學習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] 自己寫---天們來學習NSCharacterSet們快樂

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

![pp0001][1]

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


[二] NSCharacterSet的常用API學習

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

// 使用實例,如上例??!
/** 002 相反字符串限制 【具體見接下的例子】 */
@property (readonly, copy) NSCharacterSet *invertedSet;
/** 003 常用快捷方法集合 (常用的,已滿足大多數(shù)需求) */
 + controlCharacterSet
 + whitespaceCharacterSet              //空格
 + whitespaceAndNewlineCharacterSet    //空格和換行符
 + decimalDigitCharacterSet            //0-9的數(shù)字
 + letterCharacterSet                  //所有字母
 + lowercaseLetterCharacterSet         //小寫字母
 + uppercaseLetterCharacterSet         //大寫字母
 + alphanumericCharacterSet            //所有數(shù)字和字母(大小寫不分)
 + punctuationCharacterSet             //標點符號
 + 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]);
 
 //打印結果如下圖:  【可以看出invertedSet后,剛好判斷條件相反】 

![pp0001][2]

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

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

[三] NSMutableCharacterSet的常用API學習

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

/** 工能同 invertedSet 方法一樣,注意這個沒有返回值 */
- (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;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容