我目前使用過的場景:
1、可以用來處理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是小寫
思考:如果是你怎么解決?
- 自己寫。
- 用 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
明白了
001和002,下面有個(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