NSCharacterSet
2015-12-02 14:57
519 查看
单纯的讨论NSCharacterSet没有意义,因为在实现一个业务的需求下,常常会结合NSString, NSPredicate, NSArray等类来协作。
同时应该好好理解一下,NSSet, NSIndexSet等等之间关系、区别。
@interface NSCharacterSet : NSObject <NSCopying, NSMutableCopying, NSCoding>
可以看到,NSCharacterSet是直接继承自NSObject的,其实和NSSet是没有什么太大关系的呢。
而set这个概念,和数组最大的区别还是集合的特点,唯一性。
非常好的文章:http://nshipster.cn/nscharacterset/
NSString *string = @" Lorem ipsum dolar sit amet. ";
//把前后的两个字符空格去掉
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
//以空格为基准将字符串的内容分离,使得字符串在数组以独立的形式出现,
//注意到这里,如果字符间存在多个空格,剔除一个后会作为处理的对象来对待
NSArray *components = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSLog(@"components : %@", components);
//'过滤器',用正则表达式将他们间的多余空格剔除, 剔除的要求就是 ''
components = [components filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self <> ''"]];
NSLog(@"components : %@", components);
//将得到的数组连接起来
string = [components componentsJoinedByString:@""];
NSLog(@"what happens : %@", string);
还有可变的:NSMutableCharacterSet,在不可变的前提下增加了一个invert倒置的方法。
NSMutableCharacterSet *base = [NSMutableCharacterSet lowercaseLetterCharacterSet]; //小写字母
NSCharacterSet *decimalDigit = [NSCharacterSet decimalDigitCharacterSet]; //十进制数字
[base formUnionWithCharacterSet:decimalDigit]; //字母加十进制
//用上面的base隔开string然后组成一个数组,然后通过componentsJoinedByString,来连接成一个字符串
NSString *string = @"ax@d5s#@sfn$5`SF$$%x^(#e{]e";
NSArray* componentArray = [string componentsSeparatedByCharactersInSet:base];
NSLog(@"componentArray is : %@", componentArray);
NSString* componentString = [componentArray componentsJoinedByString:@"-"];
NSLog(@"componentString is : %@", componentString);
//----------------
[base invert];
NSArray* invertComponentArray = [string componentsSeparatedByCharactersInSet:base];
NSLog(@"invertComponentArray is : %@", invertComponentArray);
NSString* invertComponentString = [invertComponentArray componentsJoinedByString:@"-"];
NSLog(@"invertComponentString is : %@", invertComponentString);
结果如下:
这里需要讲解一下的是这个方法:
- (NSArray<NSString *> *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator NS_AVAILABLE(10_5, 2_0);
细心看就知道separator的意义是什么:
例如:
NSString *string = @" Lorem ipsum dolar sit amet. ";
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSArray *components = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
输出结果:
前后的空格stringByTrim消除了,而后操作的字符为 : Lorem ipsum dolar sit amet. 其中它们间的空格分别为:4 , 1, 3, 2
可以看到输出结果 "" 分别有:3 , 0 , 2 , 1 ,其实就是separator的意义是要用一个空格作为分离的 “代价”, 所以他们之间减去了一。
同理上面的:
NSString *string = @"ax@d5s#@sfn$5`SF$$%x^(#e{]e";
NSArray* componentArray = [string componentsSeparatedByCharactersInSet:base];因为base 的character集是基于小写字母和十进制数,并且首尾并没有分离,所以保留,这样分析就很好得出结论了。
同时应该好好理解一下,NSSet, NSIndexSet等等之间关系、区别。
@interface NSCharacterSet : NSObject <NSCopying, NSMutableCopying, NSCoding>
可以看到,NSCharacterSet是直接继承自NSObject的,其实和NSSet是没有什么太大关系的呢。
而set这个概念,和数组最大的区别还是集合的特点,唯一性。
非常好的文章:http://nshipster.cn/nscharacterset/
NSString *string = @" Lorem ipsum dolar sit amet. ";
//把前后的两个字符空格去掉
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
//以空格为基准将字符串的内容分离,使得字符串在数组以独立的形式出现,
//注意到这里,如果字符间存在多个空格,剔除一个后会作为处理的对象来对待
NSArray *components = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSLog(@"components : %@", components);
//'过滤器',用正则表达式将他们间的多余空格剔除, 剔除的要求就是 ''
components = [components filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self <> ''"]];
NSLog(@"components : %@", components);
//将得到的数组连接起来
string = [components componentsJoinedByString:@""];
NSLog(@"what happens : %@", string);
还有可变的:NSMutableCharacterSet,在不可变的前提下增加了一个invert倒置的方法。
NSMutableCharacterSet *base = [NSMutableCharacterSet lowercaseLetterCharacterSet]; //小写字母
NSCharacterSet *decimalDigit = [NSCharacterSet decimalDigitCharacterSet]; //十进制数字
[base formUnionWithCharacterSet:decimalDigit]; //字母加十进制
//用上面的base隔开string然后组成一个数组,然后通过componentsJoinedByString,来连接成一个字符串
NSString *string = @"ax@d5s#@sfn$5`SF$$%x^(#e{]e";
NSArray* componentArray = [string componentsSeparatedByCharactersInSet:base];
NSLog(@"componentArray is : %@", componentArray);
NSString* componentString = [componentArray componentsJoinedByString:@"-"];
NSLog(@"componentString is : %@", componentString);
//----------------
[base invert];
NSArray* invertComponentArray = [string componentsSeparatedByCharactersInSet:base];
NSLog(@"invertComponentArray is : %@", invertComponentArray);
NSString* invertComponentString = [invertComponentArray componentsJoinedByString:@"-"];
NSLog(@"invertComponentString is : %@", invertComponentString);
结果如下:
这里需要讲解一下的是这个方法:
- (NSArray<NSString *> *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator NS_AVAILABLE(10_5, 2_0);
细心看就知道separator的意义是什么:
例如:
NSString *string = @" Lorem ipsum dolar sit amet. ";
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSArray *components = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
输出结果:
前后的空格stringByTrim消除了,而后操作的字符为 : Lorem ipsum dolar sit amet. 其中它们间的空格分别为:4 , 1, 3, 2
可以看到输出结果 "" 分别有:3 , 0 , 2 , 1 ,其实就是separator的意义是要用一个空格作为分离的 “代价”, 所以他们之间减去了一。
同理上面的:
NSString *string = @"ax@d5s#@sfn$5`SF$$%x^(#e{]e";
NSArray* componentArray = [string componentsSeparatedByCharactersInSet:base];因为base 的character集是基于小写字母和十进制数,并且首尾并没有分离,所以保留,这样分析就很好得出结论了。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器