「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战」
相信我们在开发过程中, 肯定是避免不了对字符串的处理, 好比:要把今天的天c气真不错哦a中的c真哦a给去掉的一般都是如何处理呢?
我一般都是图省事, 都是使用NSString中的替换字符串方法stringByReplacingOccurrencesOfString:withString将指定的字符给替换成空字符串
[NSString stringByReplacingOccurrencesOfString:@"c" withString:@""];
写一个数组 @[@"真", @"c", @"哦", @"a"], 循环这个数组, 然后使用上面的方法替换成空字符串就可以实现了.
但是这样并不显得高端大气...有点low, 那么就换成今天咱们要说的NSCharacterSet来处理就稍微简单一点.
直接上例子:
NSString *str = @"今天的天c气真不错哦a";
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"c真哦a"];
NSArray *arr = [str componentsSeparatedByCharactersInSet:set];
NSString *res = [arr componentsJoinedByString:@""];
NSLog(@"数组:%@\n字符串:%@",arr,res);
通过上述的方式就可以达到, 我们原先使用循环的方式来替换字符串了, 是不是稍微高端一点了呢? 哈哈
如何将字符串中的数字都去掉?
废话不多说, show code
NSString *str = @"9syf77bf553a";
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
NSArray *res = [str componentsSeparatedByCharactersInSet:set];
NSLog(@"res:%@",res);
很明显就能看出来, 数字的部分都已经被剔除出去了
如何将字符串中的数字都留下, 其他的都去掉呢?
可以使用invertedSet来做一个取反就可以了, 还是上面那个字符串再来操作一遍
NSString *str = @"9syf77bf553a";
NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
NSArray *res = [str componentsSeparatedByCharactersInSet:set];
NSLog(@"res:%@",res);
可以看出invertedSet后, 判断条件是取反的
如何让textFiled只能输入数字呢?
根据上述方法这个问题还是很容易实现的, 通常我们的操作就是再delegate中拦截判断当前的字符是否是数字, 如果不是的话, 就禁止输入, 那么换成NSCharacterSet的话, 大体逻辑还是基本相符的, 就是使用的方式不一直而已, show code
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
NSString *filteredStr = [[string componentsSeparatedByCharactersInSet:set] componentsJoinedByString:@""];
if ([string isEqualToString:filteredStr]) {
return YES;
}
return NO;
}
结语
NSCharacterSet还是有很多强大的功能的, 这里就不一一举例说明了, 可以自行查找API来学习, 如果有好的想法, 可以告诉我, 谢谢