一、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下的完整字符,避免乱码情况的出现。
网友评论