天天看点

Objective-C 初窥之字符串 2.NSString介绍3 NSMutableString介绍4 结语

1.前言

字符串类型在编码中最为常见,本文向大家简单的介绍一下字符串类,希望对大家有所帮助!

2.NSString介绍

在Object-c中,字符串的声明是:

NSString *aString;

aString并不真正包含一个字符串对象—它是指向内存中字符串对象的指针。(和C语言中,用指针指向字符串的声明类似);

2.1字符串声明

以下三种方法:

NSString *array1 = [[NSString alloc] initWithFormat:@"Archy"];//方法一
NSString *array2 = [[NSString alloc] initWithString:@"Archy"];//方法二
NSString *array3 = @"Archy";//方法三
           

区别1:方法一用Format进行字符串的声明,方法二用String方法声明,第三种方法和用String声明基本一致,但是不初始化内存空间,方法一和方法二中,array1和array2使用结束后,需要进行内存释放,但是array3不需要进行内存释放。

区别2:用Format初始化的字符串,需要初始化一段动态内存空间,如:0x6a42a40,而用String声明的字符串,初始化的是常量内存区,如:0x46a8,常量内存区的地址,只要值相同,占用的地址空间是一致的。所以array2和array3的地址一致,但是array1和array3的地址不一致。

2.2将其它类型转化成字符串

可以使用Format,以整型为例,如:

int i = 100;
NSString *b = [[NSString alloc]initWithFormat:@"%d",i]; //如果是float型,可以用%f
NSLog(@"b = %@",[b description]);
           

结果输出:b = 100

2.3求字符串长度

用length求字符串长度,如:

NSLog(@"a1 = %d",a1.length);
           

结果输出a1 = 5

2.4 拼接、求子字符串

拼接,使用stringByAppendingString,如:

NSString *array4 = @"2013"; 
NSString *c = [arry1 stringByAppendingString:array4];
NSLog(@"c = %@",c);
           

结果输出:c = Archy2013

2.5 求子字符串

有三种方式:

1、substringFromIndex:x //从索引x开始到结束,包含索引x指向的值(索引的理解有点像C语言中数组的下标)

2、substringToIndex:x //从开始到索引x之前结束,不包含索引x指向的值

3、substringWithRange //定义一个区间,有开始位置和截取长度

如下:

NSString *d = [array1 substringFromIndex:1];
NSString *e = [array1 substringToIndex:3];
NSLog(@"d = %@,e = %@",d,e);
           

结果输出为:d = rchy,e = Arc

substringWithRange先定义区间,如下:

NSRange r = {2,3}; //从索引2开始,截取3个长度
NSString *f = [c substringWithRange:r];
NSLog(@"f = %@",f);
           

结果输出为:f = rch

2.6 字符串转化成其它类型

int j = [array4 intValue]; //如果字符串由数字开头,转化为起始的数字,否则转化为0
NSLog(@"j = %d",j);
           

还可以转化为float,BOOL型,查文档得知,如果转化为BOOL型,Returns YES on encountering one of "Y", "y", "T", "t", or a digit 1-9—the method ignores any trailing characters. Returns NO if the receiver doesn’t begin with a valid decimal text representation of a number.(由Y,y,T,t,1-9开始的字符串转化为YES,其余的为NO)

2.7 比较字符串是否相等

array1 isEqual:(id) //a和一个对象进行判断,比较的是地址,如果发现传进来的都是字符串,直接比较字符串大小,若相等,就返回YES,如果不是字符串,就进行地址比较

array1 isEqualToString:b //a和字符串b进行比较,比较字符串大小

如下:

BOOL c1 = [@"12" isEqual:@"12"];
BOOL c2 = [@"12" isEqualToString:@"12"];
BOOL c3 = [array1 isEqualToString:a1];
NSLog(@"c1 = %d,c2 = %d,c3 = %d",c1,c2,c3);
           

结果输出为:c1 = 1,c2 = 1,c3 = 0;

2.8 比较字符串大小

使用compare:升序返回-1,相等返回0,降序返回1

如下:

NSString *k1 = @"ABC";
NSString *k2 = @"ABc";
NSComparisonResult r1 = [k1 compare:k2];
NSLog(@"r1 = %d",r1);
           

结果输出为r1 = -1

2.9 转化字符串大小写

lowercaseString: //转化成小写

uppercaseString: //转化成大写

如下:

NSString *k3 = [k1 lowercaseString]; 
NSString *k4 = [d1 uppercaseString]; 
NSLog(@"k3 = %@,k4 = %@",k3,k4);
           

结果输出为:k3 = abc,k4 = ABC

2.10 将NSData转化为NSString

NSString* str = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
           

3 NSMutableString介绍

NSMutableString是NSString的子类,也是NSArray的可变版本,它类似于Java中的StringBuffered..可以用做缓冲。它本身没有容量限制,如果字符串中字符满了,它会自动增加长度。

NSMutableString是NSArray的子类,所以它继承了NSString的所有方法。

3.1.初始化

+(id) stringWithCapacity:size

创建一个字符串,初始包含size的字符

-(id) initWithCapacity:size

使用初始容量为size的字符串来初始化字符串

-(void) setString:nsstring

将字符串设置为nsstring

3.2 追加字符串

-(void) appendString:nsstring

在接收者的末尾附加nsstring

3.3 删除字符串

-(void) deleteCharactersInRange:range

删除指定range中的字符

3.4 插入字符串

-(void) insertString:nsstring atIndex:i

以索引i为起始位置插入nsstring

3.5 替代字符串

-(void) replaceCharactersInRange:range withString:nsstring

使用nsstring替换range指定的字符

4 结语

这次我们介绍了字符串的用法,希望对大家有所帮助。