[赠语]:Anything you’re good at contributes to happiness.
一、 NSCharacterSet
是什么❓
1.1 先来看下面的例子:
需求: 有一个字符串: @“今天我们来学习NSCharacterSet我们快乐”,去除字符串中所有的 @“今”、@“我”、@“s”。
【注意】s是小写
思考:如果是你怎么解决?
- 自己写。
- 用
NSCharacterSet
。
1.1.1 自己写,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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
,如下:
1
2
3
4
5
|
NSString *str = @"今天我们来学习NSCharacterSet我们快乐";
NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"我s今"];
NSArray *setArr = [str componentsSeparatedByCharactersInSet:characterSet];
NSString *resultStr1 = [setArr componentsJoinedByString:@""];
NSLog(@"拆分后的字符串数组------%@\n最终字符串------%@",setArr,resultStr1);
|
总结: 至此,通过上面的两个方法,已经解决了需求
的问题。通过自己写
,结合用NSCharacterSet
,可以推断出NSCharacterSet
类似一个 字符串处理工具类,而事实上,由名字也可以看出,它确实是!
二、 NSCharacterSet
的常用API
学习
1
2
3
4
|
/** 001 根据一个给定的字符串获取一个NSCharacterSet对象 */
+ (NSCharacterSet *)characterSetWithCharactersInString:(NSString *)aString;
// 使用实例,如上例!!
|
1
2
|
/** 002 相反字符串限制 【具体见接下的例子】 */
@property (readonly, copy) NSCharacterSet *invertedSet;
|
1
2
3
4
5
6
7
8
9
10
11
|
/** 003 常用快捷方法集合 (常用的,已满足大多数需求) */
+ controlCharacterSet
+ whitespaceCharacterSet //空格
+ whitespaceAndNewlineCharacterSet //空格和换行符
+ decimalDigitCharacterSet //0-9的数字
+ letterCharacterSet //所有字母
+ lowercaseLetterCharacterSet //小写字母
+ uppercaseLetterCharacterSet //大写字母
+ alphanumericCharacterSet //所有数字和字母(大小写不分)
+ punctuationCharacterSet //标点符号
+ newlineCharacterSet //换行
|
002 的 例子
1
2
3
4
5
6
7
8
|
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后,刚好判断条件相反】
|
明白了001
和002
,下面有个需求,该怎么实现?自己想吧!
需求:textFielf只能输入数字
三、 NSMutableCharacterSet
的常用API
学习
NSCharacterSet
的,NSMutableCharacterSet
都可以用。【这句貌似有些多余】。
1
2
|
/** 工能同 invertedSet 方法一样,注意这个没有返回值 */
- (void)invert;
|
附 textFielf只能输入数字的答案,如下:
1
2
3
4
5
6
7
8
|
- (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;
}
|