iOS - NSCharacterSet

圖片源自網(wǎng)絡(luò)

NSCharacterSet

  • NSCharacterSet & NSMutableCharacterSet: 用面向?qū)ο蟮姆绞絹肀硎疽唤MUnicode字符蕴忆。

  • 經(jīng)常與NSString及NSScanner組合起來使用午笛,在不同的字符上做過濾惩系、刪除或者分割操作舵揭。

NSCharacterSet使用

  • 系統(tǒng)提供的常用的創(chuàng)建NSCharacterSet的類方法

      [NSCharacterSet controlCharacterSet]; //控制符的字符集
      [NSCharacterSet whitespaceCharacterSet]; //空格的字符集
      [NSCharacterSet whitespaceAndNewlineCharacterSet]; //空格和換行符的字符集
      [NSCharacterSet decimalDigitCharacterSet]; //十進制數(shù)字的字符集
      [NSCharacterSet letterCharacterSet]; //字母的字符集
      [NSCharacterSet lowercaseLetterCharacterSet]; //小寫字母的字符集
      [NSCharacterSet uppercaseLetterCharacterSet]; //大寫字母的字符集
      [NSCharacterSet nonBaseCharacterSet]; //非基礎(chǔ)的字符集
      [NSCharacterSet alphanumericCharacterSet]; //字母和數(shù)字的字符集
      [NSCharacterSet decomposableCharacterSet]; //可分解
      [NSCharacterSet illegalCharacterSet]; //非法的字符集
      [NSCharacterSet punctuationCharacterSet]; //標點的字符集
      [NSCharacterSet capitalizedLetterCharacterSet]; //首字母大寫的字符集
      [NSCharacterSet symbolCharacterSet]; //符號的字符集
      [NSCharacterSet newlineCharacterSet]; //換行符的字符集
    
  • 通過自定義創(chuàng)建NSCharacterSet的方法

    //返回一個指定范圍的字符集,取自小寫字母字符集
    + (NSCharacterSet *)characterSetWithRange:(NSRange)aRange;
    //返回一個包含當前字符串的字符集
    + (NSCharacterSet *)characterSetWithCharactersInString:(NSString *)aString;
    //返回包含由給定位圖表示形式確定的字符的字符集,此方法對于使用來自文件或其他外部數(shù)據(jù)源的數(shù)據(jù)創(chuàng)建字符集
    + (NSCharacterSet *)characterSetWithBitmapRepresentation:(NSData *)data;
    //返回從位圖表示中讀取的字符集,存儲在文件中給定的路徑。
    + (nullable NSCharacterSet *)characterSetWithContentsOfFile:(NSString *)fName;
    

    例如:

    [NSCharacterSet characterSetWithCharactersInString:@"Hello"];   //String中的文字組成的set  
    [NSCharacterSet characterSetWithRange:NSMakeRange(48, 10)]];//ascll碼校赤,此處為(0-9)  
    [[NSCharacterSet decimalDigitCharacterSet] invertedSet];//數(shù)字之外的字符組成的set
    
  • 判斷一個字符是否在set中

    //指定字符集是包含于在于當前字符集
    - (BOOL)characterIsMember:(unichar)aCharacter;
    

    例如:

    [[NSCharacterSet decimalDigitCharacterSet] characterIsMember:48];  //48是0的ascll碼吆玖;
    

舉例使用

  • 去掉首尾空格
NSString *testString = @"      This is the string contains whitespace in beginning and ending     ";
    NSString *whitesspaceStr = [testString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSLog(@"%@",whitesspaceStr);
  • 去除首尾指定字符串
NSString *str=@"哈哈呵呵嘿嘿吼吼";
    NSCharacterSet *cs= [NSCharacterSet characterSetWithCharactersInString:@"哈吼"];
    NSString *strResult = [str stringByTrimmingCharactersInSet:cs];
    NSLog(@"%@",strResult);
  • 用指定字符串替代當前字符中的指定字符集中的字符串
NSMutableCharacterSet *letter = [NSMutableCharacterSet lowercaseLetterCharacterSet];
    NSCharacterSet *decimalDigit = [NSCharacterSet decimalDigitCharacterSet];
    [letter formUnionWithCharacterSet:decimalDigit];
    NSString *string = @"g8!hgr3@09#23uiq%^78sjn453t78&13gesg*wt53(545y45)q3at";
    NSLog(@"%@",[[string componentsSeparatedByCharactersInSet:letter] componentsJoinedByString:@"_"]);
    [letter invert];  //字母數(shù)字反轉(zhuǎn)
    NSLog(@"%@",[[string componentsSeparatedByCharactersInSet:letter] componentsJoinedByString:@"_"]);
  • 去除所有空格
NSString *string = @"  a b  cd   ef gh ij    klm   nopq rstu v  w x   y z  ";
    NSLog(@"%@",[[string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] componentsJoinedByString:@""]);
  • 與NSPredicate結(jié)合使用壓縮空格
NSString *string = @"  Additional    setup   after    loading the     view.";
    string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

    NSArray *components = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    components = [components filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self <> ''"]];

    string = [components componentsJoinedByString:@" "];
    NSLog(@"%@", string);
  • 判斷字符串是否只包含數(shù)字
- (BOOL)validateNumber:(NSString*)number {
    BOOL res = YES;
    NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    int i = 0;
    while (i < number.length) {
        NSString * string = [number substringWithRange:NSMakeRange(i, 1)];
        NSRange range = [string rangeOfCharacterFromSet:tmpSet];
        if (range.length == 0) {
            res = NO;
            break;
        }
        i++;
    }
    return res;
}
  • 在UITextFieldDelegate方法中, 限制只能輸入數(shù)字和小數(shù)點, 且第一位不可以輸入小數(shù)點, 小數(shù)點只能輸入一個
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSCharacterSet *cs;
    NSUInteger nDotLoc = [textField.text rangeOfString:@"."].location;
    if (NSNotFound == nDotLoc && 0 != range.location) {
        cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
    }else{
        cs = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
    }
    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
    BOOL basicTest = [string isEqualToString:filtered];

    if (!basicTest) {
        return NO;
    }
    return YES;
}

注意事項

  • 盡可能的少創(chuàng)建可變字符設(shè)置(character sets).

  • 緩存character sets筒溃,而不是不斷重新創(chuàng)建character sets.

  • 避免歸檔character sets作為對象,但可以存儲到character sets文件當中 (歸檔將被復制到不同的歸檔文件,將導致磁盤空間的浪費)

  • 當創(chuàng)建一個自定義sets時,不需要在創(chuàng)建之后進行改變,使用一個不可變character set作為最終的使用,或創(chuàng)建一個character set文件并存儲到應用中.

參考

學會NSCharacterSet,再也不怕各種字符串處理U闯恕怜奖!

iOS中NSCharacterSet的使用詳解

117.NSCharacterSet-字符集使用總結(jié)

NSCharacterSet的使用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市翅阵,隨后出現(xiàn)的幾起案子歪玲,更是在濱河造成了極大的恐慌,老刑警劉巖掷匠,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滥崩,死亡現(xiàn)場離奇詭異,居然都是意外死亡讹语,警方通過查閱死者的電腦和手機钙皮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來顽决,“玉大人短条,你說我怎么就攤上這事∏嬷担” “怎么了慌烧?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鸠儿。 經(jīng)常有香客問我屹蚊,道長,這世上最難降的妖魔是什么进每? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任汹粤,我火速辦了婚禮,結(jié)果婚禮上田晚,老公的妹妹穿的比我還像新娘嘱兼。我一直安慰自己,他們只是感情好贤徒,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布芹壕。 她就那樣靜靜地躺著,像睡著了一般接奈。 火紅的嫁衣襯著肌膚如雪踢涌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天序宦,我揣著相機與錄音睁壁,去河邊找鬼。 笑死,一個胖子當著我的面吹牛潘明,可吹牛的內(nèi)容都是我干的行剂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钳降,長吁一口氣:“原來是場噩夢啊……” “哼厚宰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牲阁,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤固阁,失蹤者是張志新(化名)和其女友劉穎壤躲,沒想到半個月后城菊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡碉克,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年凌唬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漏麦。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡客税,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撕贞,到底是詐尸還是另有隱情更耻,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布捏膨,位于F島的核電站秧均,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏号涯。R本人自食惡果不足惜目胡,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望链快。 院中可真熱鬧誉己,春花似錦、人聲如沸域蜗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霉祸。三九已至筑累,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脉执,已是汗流浹背疼阔。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人婆廊。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓迅细,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淘邻。 傳聞我的和親對象是個殘疾皇子茵典,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 個人學習批處理的初衷來源于實際工作;在某個迭代版本有個BS(安卓手游模擬器)大需求宾舅,從而在測試過程中就重復涉及到...
    Luckykailiu閱讀 4,725評論 0 11
  • Swift學習有問必答群 : 313838956 ( mac版QQ有權(quán)限要求, 入群只能通過手機版 QQ申請...
    Guards翻譯組閱讀 6,605評論 9 13
  • 我有一個三歲多的女兒筹我,雖然我也三十出頭了扶平,可在媽媽眼里,我也不過是讓她不放心的孩子蔬蕊。媽媽暈車结澄,一個小時的車程也必須...
    肖筱閱讀 494評論 0 0
  • 用夢織一張網(wǎng) 打撈茶樹海里的魚 可我沒有力氣 于是墜入海底 我們就這樣不期而遇 我猜你是故事里的美人魚 可你卻笑笑...
    割鹿閱讀 331評論 1 5
  • 月黑風高,暴雨如注岸夯。一行三人滿面倦色麻献,來到街頭招待所入住,要進行最后的決戰(zhàn)猜扮。 節(jié)奏超人勉吻,身材勻稱,細眼闊口旅赢,平頭齿桃。...
    milk411閱讀 402評論 0 0