iOS-NSCharacterSet

609 阅读2分钟

「这是我参与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);

image.png

很明显就能看出来, 数字的部分都已经被剔除出去了

如何将字符串中的数字都留下, 其他的都去掉呢?

可以使用invertedSet来做一个取反就可以了, 还是上面那个字符串再来操作一遍

    NSString *str = @"9syf77bf553a";
    NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
    NSArray *res = [str componentsSeparatedByCharactersInSet:set];
    NSLog(@"res:%@",res);

image.png

可以看出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来学习, 如果有好的想法, 可以告诉我, 谢谢