@chinese-ppmt
2016-12-23T07:48:32.000000Z
字数 2645
阅读 7959
iOS API学习 NSCharacterSet UITextField限制
[PP赠语]:Anything you're good at contributes to happiness.
NSCharacterSet是什么❓需求: 有一个字符串:@"今天我们来学习NSCharacterSet我们快乐",去除字符串中所有的@"今"、@"我"、@"s"。
【注意】s是小写思考:如果是你怎么解决?
1. 自己写。
2. 用 NSCharacterSet。
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们快乐
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学习
/** 001 根据一个给定的字符串获取一个NSCharacterSet对象 */+ (NSCharacterSet *)characterSetWithCharactersInString:(NSString *)aString;// 使用实例,如上例!!
/** 002 相反字符串限制 【具体见接下的例子】 */@property (readonly, copy) NSCharacterSet *invertedSet;
/** 003 常用快捷方法集合 (常用的,已满足大多数需求) */+ controlCharacterSet+ whitespaceCharacterSet //空格+ whitespaceAndNewlineCharacterSet //空格和换行符+ decimalDigitCharacterSet //0-9的数字+ letterCharacterSet //所有字母+ lowercaseLetterCharacterSet //小写字母+ uppercaseLetterCharacterSet //大写字母+ alphanumericCharacterSet //所有数字和字母(大小写不分)+ punctuationCharacterSet //标点符号+ newlineCharacterSet //换行
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都可以用。【这句貌似有些多余】。
/** 工能同 invertedSet 方法一样,注意这个没有返回值 */- (void)invert;
附 textFielf只能输入数字的答案,如下
- (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;}