温故而知新,now复习一下Foundation中的字符串对象

来源:互联网 发布:淘宝店能贷款吗 编辑:程序博客网 时间:2024/06/04 01:07

ios开发的时候,Foundation中的字符串对象是再常用不过的了,与此同时,NSDictionary对象也是很常用的,here,先复习String Objects

String Objects有两个版本,一个是不可变的NSString,另一个是NSMutableString

对于NSSting,来几个操作:

// 声明几个string对象NSString *str1=@"i'll be back";NSString *str2=@"just do it";NSString *result;
//计算字符串包含的charcter, -(NSUInteger)length;NSSLog(@"the characters included in string str1 are:%lu, [str1 length]);
<pre name="code" class="objc">// 构建String Object,注意,这种构建是一个深拷贝result = [NSString stringWithString:str1];// 如果要进行浅拷贝则这么写result = str1;

字符串的比较中使用的是Foundation定义的NSComparisionResult,以及-(NSComparisionResult)compare:(NSString*)string方法,延续上面的工作,

</pre><pre name="code" class="objc">NSComparisonResult compareResult = [str1 compare: str2];if (compareResult == NSOrderedAscending) {NSLog(@"str1 < str2");} else if (compareResult == NSOrderedSame) {NSLog(@"str1 == str2");} else if (compareResult == NSOrderedDescending) {NSLog(@"str1 > str2");}

of course, 如果仅仅是比较两个String是不是相等,也可以用Foundation提供的-(bool)isEqualToString:(NSString*)string方法

if (YES == [str1 isEqualToString:str2]) {   NSLog(@"str1=str2");} else {   NSLog(@"str1 != str2");}

再来一个字符串追加, 也就是所谓的字符串对象的join操作:

//将str2加到str1之后NSString *str3 = [str1 stringByAppendingString:str2];

字符串对象中的字符大小写转化

// 全部字符转化成大写str1 = [str1 uppercaseString];// 全部字符转化成小写str2 = [str2 lowercaseString];


关于子串的操作。Foundation对于NSString中提供了对于子串的操作,如-(NSString*)substringToIndex:(NSUInteger)k; 这个方法获得从第0个字符到第k-1个字符的子串。也就是前k个字符构成的子串。和这个方法类似的有-(NSString*)substringFromIndex:(NSUInteger)jjj;则是获得从第jjj个字符到最后一个字符之间的子串。

sub1 = [str1 substringToIndex:2];sub2 = [str2 substringFromIndex:5];sub3 = [str1 substringFromIndex:8] substringToIndex:6]];

对于str1 substringFromIndex:8] substringToIndex:6]实际上拿到的是str1第8个字符开始之后的6个字符组成的子串。对于这个需求也可以这么实现,封装性更好一点,它借助的是NSRange这个结构体:

NSRange range = NSMakeRange(8,6);sub33 = [str1 substringWithRange:range];
以上是获取一个子串的操作。除了获取子串,我们对于字符串的需求还包括查找一个字符串中是否存在某个子串的操作。例如,在“hello,new stage“中,我们想看看有没有new这个字符串,可以这么来实现:

NSString *pattern = @”new";NSString *source = @"hello, new stage";NSSRange ra = [source rangeOfString:pattern];if (ra == NSNotFound) {  NSSLog(@"pattern is not a substring of source");} else {  NSSLog(@"pattern in source is index:%lu", ra.location);}
NSRange是Foundation中提供的结构体,这个在c++中也是有类似的结构用来封装一个范围。NSNotFound类是-1或者什么标识,标识没有在目标串中找到模式串。如果又找到,通过NSRange的location成员就能获得模式串在目标串source中的开始下标。



      






0 0
原创粉丝点击