NSString and NSMutableString (一)
1.NSString(不可变字符串)
1)讲字符串之前,我们先了解下字符串相关有用的数据类型,Cocoa为我门准备了一个字符串操作相关的结构体NSRange
。
typedef struct _NSRange{
NSUInteger location;
NSUInteger length;
}NSRange;
location,表示其实位置,字符串时从0开始的。length,表示长度。
调用NSRange的方式有三种:
1 NSRange range=NSMakeRange(10,5);
2 NSRange range; range.location=10; range.length=5;
3 NSRange range={10,3};
一般第一种方式比较常用。
2)字符串创建
1. NSString *string=@"字符串内容(中英文都可以)";
2. NSString *string=[NSString new];//这里是实例化一个NSString对象,对象stirng的值为NULL。OC中[]代表调用方法,以后这种调用方式会很常见到。
3. NSString *string = [NSString stringWithFormat:@"我今年%d岁了",5];//string="我今年5岁了";这是NSString的类方法创建字符串。
4. NSString *string =[[NSString alloc]initWithFormat:@"Hello"];
//....同样类似的实例方法还有很多:
-(id)initWithString:(NSString *)aString;
-(id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding;
//....不写了,具体可以看API
3)字符串长度
NSString已经帮我们封装好了一个便利的实例方法:length,用于返回一个字符串中的字符个数。
-(unsigned int)length;
NSString *s=@"Hello";
unsigned long len=[string length];//一般不会这么用,麻烦,直接用.length就可以得到字符串长度了。
NSLog(@"Hello的长度是:%ld",s.length);//length是无符号的长整型,用%ld接收。
4)字符串常用的几种方法
字符串比较
<1>比较两个字符串的指针
比较两个字符串的指针,可以直接用“==”来判断
NSString *str1=@"Hello"; NSString *str2=[NSString stringWithFormat:@"Hello"]; if(str1==str2){ NSLog(@"指针相同"); } else{ NSLog(@"指针不同"); } //这里输出的是指针不同,注意,stringWithFormat得到的字符串时一个新的字符串对象(深拷贝)。如果用stringWithString得到的是一个浅拷贝对象,它们指向同一个对象,所以指针相同。
<2>比较两个字符串的内容
-(BOOL) isEqualToString:(NSString *)aString;//aString就是参与比较的第二个字符串,如果内容相同,返回YES(1),反之,返回NO(0)。
if([@"Hello" isEqualToString :@"Hello"]){ NSLog(@"内容相同"); } else{ NSLog(@"内容不相同"); } //内容明显是相同的,[string1 isEqualToString string2]。
字符串拼接
讲到字符串拼接,LZ很不习惯啊,以前C#的+连接符特别习惯,换到OC却不给用…
那么OC中怎么拼接呢?拼接NSString也为我们提供了实例方法:
-(NSString )stringByAppendingString:(NSString )aString;
-(NSString )stirngByAppendingFormat:(NSString )format…;NSString *str=@"LOL我表哥是"; NSString *newStr=[str stringByAppendingString:@"黄金5段位"]; //newStr=LOL我表哥是黄金5段位 NSString *str2=@"i want to buy "; NSString *newStr2=[str2 stringByAppendingFormat:@"iphone%ds",5]; //newStr2=i want to buy iphone5s
字符串查找、截取
查找
-(BOOL)hasPrefix:(NSString *)string;//判断一个字符串是否以stirng开头
-(BOOL)hasSuffix:(NSString *)string;//判断一个字符串是否以stirng结尾
//当我们用来查找文件时非常有用,可以获取文件名用字符串保存起来,再适当调用上述两个方法 NSString *fileName=@"ios-7-24.doc"; if([fileName hasPrefix :@"ios"]){ NSLog(@"这个文件跟iOS相关"); } if([fileName hasSuffix :@".doc"]){ NSLog(@"这个文件是word文档"); }
除此之外我们之前一开始讲了NSRange,也可以通过NSRange来查找,例子走起:
NSString *fileName=@"ios-7-24.doc"; NSRange range=[fileName rangeOfString :@"24"]; //location=6,length=2;从0开始数起... //假如没有查找到,range.location=NSNotFound。这点非常重要,通常适用于while循环查找的跳出条件。
截取
-(unichar)characterAtIndex:(NSUInteger)index:index;//字符串索引时从0开始的,这点要牢记。
NSString *str=@"my name is GuoMingJian."; char c=[str characterAtIndex:14]; NSLog(@"%c",c); //结果为:M
-(NSString *)substringFromIndex:(NSUInteger)from:index;//包含from位置的字符。
NSString *str=@"my name is GuoMingJian."; NSString *newStr=[str substringFromIndex:11];//11位置是G,这里是G到字符串结尾 NSLog(@"%@",newStr); //结果为:GuoMingJian.
-(NSString *)substringToIndex:(NSUInteger)to:index;//这里不包含to位置的字符
NSString *str=@"my name is GuoMingJian."; NSString *newStr=[str substringToIndex:7];//位置是name后面的空格,这里是字符串0到索引7 NSLog(@"%@",newStr); //结果为:my name//name后无空格
-(NSString *)substringWithRange:(NSRange)range:range;
NSString *str=@"my name is GuoMingJian."; NSString *newStr=[str substringWithRange:NSMakeRange(3,6)]; NSLog(@"%@",newStr); //结果为:name i//从索引3位置开始(包括3)截取长度为6的字符串。
字符串的转换函数
-(double)doubleValue;
-(float)floatValue;
-(int)intValue;
double d=[@"123" doubleValue]; float f=[@"123" floatValue]; int i=[@"123" intValue]; NSLog(@"%.2f;%.2f,%d",d,f,i); //123.00;123.00,123
字符串替换函数
替换函数也是比较重要,也挺好用的。希望能掌握…
-(NSString *)stringByReplacingOccurrencesOfString:
(NSString )target withString:(NSString )rep;//将rep替换targetNSString *str=[@"i am a guy" stringByReplacingOccurrencesOfString:@"guy" withString:@"gay"]; NSLog(@"%@",str); //i am a gay
-(NSString *)stringByReplacingCharactersInRange:
(NSRange)range withString:(NSString *)rep;
//将原字符串range范围的字符替换成rep//NSString *str=[@"i am a guy" stringByReplacingCharactersInRange:NSMakeRange(7,3) withString:@"gay"]; NSRange range=NSMakeRange(7,3); NSString *str=[@"i am a guy" stringByReplacingCharactersInRange:range withString:@"gay"]; NSLog(@"%@",str); //i am a gay
分隔符方法,componentsSeparatedByString 这个方法也很经常用到,比如处理一个很长且很有规律性的字符串,通常用它来格式化处理。它返回的是一个数组。
-(NSArray )componentsSeparatedByString:(NSString )separator;NSString *str=@"Hesbllo worsbld"; NSArray *array=[str componentsSeparatedByString:@"sb"]; for(id i in array){ NSLog(@"%@",i); } //结果: //He //llo wor //ld
字符串大小写转换函数
-(NSString *)uppercaseString:;//将字符全部改成大写的
NSString *str=@"hello world"; str=[str uppercaseString]; NSLog(@"%@",str); //HELLO WORLD
-(NSString *)lowercaseString:;//将字符全部改成小写的
NSString *str=@"HELLO WORLD"; str=[str lowercaseString]; NSLog(@"%@",str); //hello world
-(NSString *)capitalizedString:;//将首个字符改成大写,其余的全部都小写
NSString *str=@"HELLO WORLD"; str=[str capitalizedString]; NSLog(@"%@",str); //Hello World
总结:NSString 的实例方法都会产生一个新的字符串,也就是说它并不是在原有的字符串改变其本身的。而NSString的子类NSMutableString就是在其本身操作的。子类NSMutableString也能使用父类NSStirng所有实例方法。