[关闭]
@chinese-ppmt 2016-12-23T07:48:32.000000Z 字数 2645 阅读 7397

学会NSCharacterSet,再也不怕各种字符串处理!!

iOS API学习 NSCharacterSet UITextField限制


[PP赠语]:Anything you're good at contributes to happiness.


[一] NSCharacterSet是什么❓

1.1 先来看下面的例子:

需求: 有一个字符串:@"今天我们来学习NSCharacterSet我们快乐",去除字符串中所有的@"今"@"我"@"s"
【注意】s是小写

思考:如果是你怎么解决?
1. 自己写。
2. 用 NSCharacterSet

1.1.1 自己写,如下:
  1. NSString *str = @"今天我们来学习NSCharacterSet我们快乐";
  2. NSString *str1 = @"我s今";
  3. NSMutableString *resultStr = [[NSMutableString alloc]init];
  4. for (int i = 0; i < str.length; i++) {
  5. NSString *indexStr = [str substringWithRange:NSMakeRange(i, 1)];
  6. if (![str1 containsString:indexStr]) {
  7. [resultStr appendString:indexStr];
  8. }
  9. }
  10. NSLog(@"自己写---%@",resultStr);
  11. //2016-12-23 13:19:42.584 PPDemos[9065:6978391] 自己写---天们来学习NSCharacterSet们快乐
1.1.2 用 NSCharacterSet,如下:
  1. NSString *str = @"今天我们来学习NSCharacterSet我们快乐";
  2. NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"我s今"];
  3. NSArray *setArr = [str componentsSeparatedByCharactersInSet:characterSet];
  4. NSString *resultStr1 = [setArr componentsJoinedByString:@""];
  5. NSLog(@"拆分后的字符串数组------%@\n最终字符串------%@",setArr,resultStr1);

pp0001

总结: 至此,通过上面的两个方法,已经解决了需求的问题。通过自己写,结合用NSCharacterSet,可以推断出NSCharacterSet类似一个字符串处理工具类,而事实上,由名字也可以看出,它确实是!


[二] NSCharacterSet的常用API学习

  1. /** 001 根据一个给定的字符串获取一个NSCharacterSet对象 */
  2. + (NSCharacterSet *)characterSetWithCharactersInString:(NSString *)aString;
  3. // 使用实例,如上例!!
  1. /** 002 相反字符串限制 【具体见接下的例子】 */
  2. @property (readonly, copy) NSCharacterSet *invertedSet;
  1. /** 003 常用快捷方法集合 (常用的,已满足大多数需求) */
  2. + controlCharacterSet
  3. + whitespaceCharacterSet //空格
  4. + whitespaceAndNewlineCharacterSet //空格和换行符
  5. + decimalDigitCharacterSet //0-9的数字
  6. + letterCharacterSet //所有字母
  7. + lowercaseLetterCharacterSet //小写字母
  8. + uppercaseLetterCharacterSet //大写字母
  9. + alphanumericCharacterSet //所有数字和字母(大小写不分)
  10. + punctuationCharacterSet //标点符号
  11. + newlineCharacterSet //换行
002 的 例子
  1. NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
  2. NSString *str = @"7sjf78sf990s";
  3. NSLog(@"set----%@",[str componentsSeparatedByCharactersInSet:set]);
  4. NSCharacterSet *invertedSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
  5. NSLog(@"invertedSet----%@",[str componentsSeparatedByCharactersInSet:invertedSet]);
  6. //打印结果如下图: 【可以看出invertedSet后,刚好判断条件相反】

pp0001

明白了001002,下面有个需求,该怎么实现?自己想吧!

需求:textFielf只能输入数字

[三] NSMutableCharacterSet的常用API学习

NSCharacterSet的,NSMutableCharacterSet都可以用。【这句貌似有些多余】。

  1. /** 工能同 invertedSet 方法一样,注意这个没有返回值 */
  2. - (void)invert;

textFielf只能输入数字的答案,如下

  1. - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
  2. NSCharacterSet *charSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
  3. NSString *filteredStr = [[string componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@""];
  4. if ([string isEqualToString:filteredStr]) {
  5. return YES;
  6. }
  7. return NO;
  8. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注