美文网首页程序员
iOS字符串处理

iOS字符串处理

作者: senpaiLi | 来源:发表于2018-11-28 18:35 被阅读8次
一、NSCharacterSet的使用

NSCharacterSet是一个字符集合,利用好这个类,可以更加方便的对字符串进行操作。

比如"abcdefghijklmnfwafajkfjawifa",需求要将这段字符中的"f"、"a"去掉,我们大概会这么做:

    NSString *str = @"abcdefghijklmnfwafajkfjawifa";
    NSInteger length = str.length;
    
    NSString *removeStr = @"af";
    NSMutableString *resultStr = [NSMutableString string];
    for (int i = 0; i < length; i ++) {
        NSString *indexStr = [str substringWithRange:NSMakeRange(i, 1)];
        if (![removeStr containsString:indexStr]) {
            [resultStr appendString:indexStr];
        }
    }
    
    NSLog(@"%@",resultStr);

有心的可以算一下时间复杂度,这真的是一段看起来就很烦躁的代码。

如果用NSCharacterSet进行处理:

    NSString *str = @"abcdefghijklmnfwafajkfjawifa";
    NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"af"];
    
    NSString *resultStr = [str stringByTrimmingCharactersInSet:set];
    
    NSLog(@"%@",resultStr);

stringByTrimmingCharactersInSet:缩减NSCharacterSet里面的字符。

NSCharacterSet的创建:

除了自己拼接string的方式,还可以使用以下类方法,直接获取一个想要的字符集合

/** 常用快捷方法集合  */ 
+ controlCharacterSet 
+ whitespaceCharacterSet //空格 
+ whitespaceAndNewlineCharacterSet //空格和换行符 
+ decimalDigitCharacterSet //0-9的数字 
+ letterCharacterSet //所有字母 
+ lowercaseLetterCharacterSet //小写字母 
+ uppercaseLetterCharacterSet //大写字母 
+ alphanumericCharacterSet //所有数字和字母(大小写不分) 
+ punctuationCharacterSet //标点符号 
+ newlineCharacterSet //换行

/** URL相关快捷方法集合  */ 
+ URLUserAllowedCharacterSet 
+ URLPasswordAllowedCharacterSet  
+ URLHostAllowedCharacterSet 
+ URLPathAllowedCharacterSet //路径允许使用的字符集合
+ URLQueryAllowedCharacterSet //参数允许使用的字符集合
+ URLFragmentAllowedCharacterSet 
二、rangeOfComposedCharacterSequencesForRange、rangeOfComposedCharacterSequenceAtIndex

每一个中文或者英文在NSString中的length均为1,但是一个Emoji的length的长度为2或者4,如果使用substringToIndex可能存在把Emoji截断而导致乱码的情况。

这两个方法,可以获取当前范围或者当前index下的完整字符,避免乱码情况的出现。

相关文章

网友评论

    本文标题:iOS字符串处理

    本文链接:https://www.haomeiwen.com/subject/kdzaqqtx.html