NSCharacterSet

NSCharacterSet代表一個(gè)字符的集合蠢正,它通常結(jié)合NSString桩了、NSScanner使用芬迄。

使用場(chǎng)景

這邊介紹兩個(gè)NSCharacter結(jié)合NSString的使用場(chǎng)景攒庵。
在此之前校摩,先來(lái)介紹一下NSString中兩個(gè)跟NSCharacterSet有關(guān)的方法:

//根據(jù)字符集來(lái)清理字符串兩端的字符
- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;
//根據(jù)字符集separator來(lái)分割字符串
- (NSArray<NSString *> *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator;

例子1

實(shí)現(xiàn)功能:

清除字符串兩端的數(shù)字

代碼我們可以這樣寫:

NSString *string = @"123abc123";
        
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]];
        
NSLog(@"%@",string);

打印結(jié)果是:

abc

例子2

實(shí)現(xiàn)功能:

清除字符串"Lorem    ipsum dolar   sit  amet."中多余的空格

代碼我們可以這樣寫:

NSString *string = @"Lorem    ipsum dolar   sit  amet.";

string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

NSArray *components = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
components = ({
    NSMutableArray *mArr = [NSMutableArray new];
    for (NSString *str in components) {
        if ([str isEqualToString:@""] == NO) {
            [mArr addObject:str];
        }
    }
    mArr;
});

string = [components componentsJoinedByString:@" "];

NSLog(@"%@",string);

打印結(jié)果是:

Lorem ipsum dolar sit amet.

補(bǔ)充

此處我只是列舉了兩個(gè)可能的使用場(chǎng)景芳撒,具體的需要結(jié)合實(shí)際需求來(lái)決定實(shí)現(xiàn)方案邓深。
另外例子2中,重組字符串的代碼還可以這樣寫:

components = [components filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self <> ''"]];

NSCharacterSet

說(shuō)完NSCharacterSet的使用場(chǎng)景笔刹,接著來(lái)介紹一下NSCharacterSet的方法

系統(tǒng)提供的常用字符集初始化類方法

[NSCharacterSet controlCharacterSet];                  控制字符芥备,包括換行符(\n)、制表符(\t)等舌菜,具體有哪些萌壳,不清楚
[NSCharacterSet whitespaceCharacterSet];               空格符
[NSCharacterSet whitespaceAndNewlineCharacterSet];     空格符、換行符
[NSCharacterSet decimalDigitCharacterSet];             數(shù)字字符日月,0-9
[NSCharacterSet letterCharacterSet];                   字母字符
[NSCharacterSet lowercaseLetterCharacterSet];          小寫字母字符
[NSCharacterSet uppercaseLetterCharacterSet];          大寫字母字符
[NSCharacterSet nonBaseCharacterSet];
[NSCharacterSet alphanumericCharacterSet];             字母袱瓮、數(shù)字字符
[NSCharacterSet decomposableCharacterSet];
[NSCharacterSet illegalCharacterSet];
[NSCharacterSet punctuationCharacterSet];              標(biāo)點(diǎn)符號(hào)字符,指在用于分隔文字的符號(hào)
[NSCharacterSet capitalizedLetterCharacterSet];
[NSCharacterSet symbolCharacterSet];                   符號(hào)字符爱咬,除了標(biāo)點(diǎn)符號(hào)之外尺借,例如¥、$這樣的符號(hào)
[NSCharacterSet newlineCharacterSet];                  換行字符

在這其中精拟,controlCharacterSet燎斩、nonBaseCharacterSet、decomposableCharacterSet蜂绎、illegalCharacterSet栅表、capitalizedLetterCharacterSet這幾個(gè),我都不理解师枣,有明白的朋友希望不吝賜教怪瓶。

uppercaseLetterCharacterSet與capitalizedLetterCharacterSet

在stackoverflow上找到了一個(gè)問題,其中談及了uppercaseLetterCharacterSet與capitalizedLetterCharacterSet的關(guān)系坛吁,傳送門

According to the docs, +capitalizedLetterCharacterSet contains the Titlecase category, whereas +uppercaseLetterCharacterSet contains Uppercase and Titlecase.

capitalizedLetterCharacterSet包含Titlecase劳殖,而uppercaseLetterCharacterSet包含Uppercase和Titlecase铐尚,簡(jiǎn)而言之,capitalizedLetterCharacterSet是uppercaseLetterCharacterSet的子集宣增。

自定義初始化方法

//通過(guò)范圍初始化NSCharacterSet,此處的range指的是unicode在碼表上的范圍
+ (NSCharacterSet *)characterSetWithRange:(NSRange)aRange;
//通過(guò)字符串初始化NSCharacterSet
+ (NSCharacterSet *)characterSetWithCharactersInString:(NSString *)aString;
//通過(guò)二進(jìn)制數(shù)據(jù)初始化NSCharacterSet
+ (NSCharacterSet *)characterSetWithBitmapRepresentation:(NSData *)data;
//通過(guò)文件初始化NSCharacterSet
+ (nullable NSCharacterSet *)characterSetWithContentsOfFile:(NSString *)fName;

這里用實(shí)際代碼說(shuō)明一下characterSetWithRange的使用

//生成一個(gè)包含字符'a'~'z'的字符集
NSRange lcEnglishRange;
NSCharacterSet *lcEnglishLetters;

lcEnglishRange.location = (unsigned int)'a';
lcEnglishRange.length = 26;
lcEnglishLetters = [NSCharacterSet characterSetWithRange:lcEnglishRange];

屬性

//字符集的二進(jìn)制數(shù)據(jù)矛缨,用于傳輸爹脾、歸檔灵妨、保存成文件
@property (readonly, copy) NSData *bitmapRepresentation;
//一個(gè)除了數(shù)字字符之外的所有字符的字符集
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]

用于判斷的方法

//判斷aCharacter是否包含在字符集中
- (BOOL)characterIsMember:(unichar)aCharacter;
//功能貌似是一樣的,入?yún)⑹荱TF-32的字符朱转?夺刑??不知道這兩個(gè)方法的區(qū)別,知道的朋友不吝賜教
- (BOOL)longCharacterIsMember:(UTF32Char)theLongChar;
//判斷theOtherSet是不是自身的子集
- (BOOL)isSupersetOfSet:(NSCharacterSet *)theOtherSet;

可以用來(lái)驗(yàn)證capitalizedLetterCharacterSet是否是uppercaseLetterCharacterSet的子集

不明白的地方

- (BOOL)hasMemberInPlane:(uint8_t)thePlane;

這個(gè)貌似涉及到Unicode的知識(shí)羞海,我暫時(shí)沒研究明白,有興趣的可以,看看這篇文章傳送門

NSMutableCharacterSet

//添加某個(gè)范圍的字符到字符集
- (void)addCharactersInRange:(NSRange)aRange;
//移除某個(gè)范圍的字符到字符集
- (void)removeCharactersInRange:(NSRange)aRange;
//添加字符串中的字符到字符集
- (void)addCharactersInString:(NSString *)aString;
//移除字符串中的字符到字符集
- (void)removeCharactersInString:(NSString *)aString;
//合并兩個(gè)字符集
- (void)formUnionWithCharacterSet:(NSCharacterSet *)otherSet;
//保留兩個(gè)字符集的集合恢恼,即兩個(gè)字符集都有的字符的集合
- (void)formIntersectionWithCharacterSet:(NSCharacterSet *)otherSet;

相關(guān)閱讀

NSHipster.cn上的一篇譯文:NSHipster-NSCharaterSet

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牵署,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子青责,更是在濱河造成了極大的恐慌吴菠,老刑警劉巖占哟,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異策肝,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門衅码,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惹恃,“玉大人巫糙,你說(shuō)我怎么就攤上這事开呐。” “怎么了庸疾?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵渠概,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我辩恼,道長(zhǎng)灶伊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮饺律,結(jié)果婚禮上十籍,老公的妹妹穿的比我還像新娘蛆封。我一直安慰自己,他們只是感情好勾栗,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布娶吞。 她就那樣靜靜地躺著,像睡著了一般械姻。 火紅的嫁衣襯著肌膚如雪妒蛇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天楷拳,我揣著相機(jī)與錄音绣夺,去河邊找鬼。 笑死欢揖,一個(gè)胖子當(dāng)著我的面吹牛陶耍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播她混,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼烈钞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了坤按?” 一聲冷哼從身側(cè)響起毯欣,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎臭脓,沒想到半個(gè)月后酗钞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡来累,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年砚作,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘹锁。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡葫录,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出领猾,到底是詐尸還是另有隱情米同,我是刑警寧澤骇扇,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站窍霞,受9級(jí)特大地震影響匠题,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜但金,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一韭山、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冷溃,春花似錦钱磅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至凿歼,卻和暖如春褪迟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背答憔。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工味赃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虐拓。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓心俗,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蓉驹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子城榛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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