iOS字串處理
一、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下的完整字元,避免亂碼情況的出現。