一、OC三大基本数据结构概述
1.NSString: OC中的字符串。
基类:NSString: 字符串,不可变字符串,对象一旦创建,字符串的长度和内容不可变。
子类:NSMutableString: 可变字符串。
2.NSArray: OC中的数组。数组对象存储的地址是有顺序的元素。
基类: NSArray:数组
子类: NSMutableArray 可变数组
3.NSDicstionary: OC中的字典。字典对象存储的地址是没有顺序的键值对。与数组类似,但又区别于数组。
基类:NSDictionary:字典
子类:NSMutableDictionary: 可变字典
二、NSString的使用
1.C中的字符串和OC的字符串
OC完全兼容C,所以在OC中是可以使用C中的字符串的,但是OC有自己独有的创建字符串的方式。在OC中,字符串是一个类,每个创建的字符串都是类的对象。
创建和输出比较
char * p = "C str:hello world";
NSLog(@"%s", p);
NSString * str1 = @"OC str1: hello world";
NSLog(@"%@", str1);
2.NSString对象的创建
//使用C的字符串来创建OC字符串对象
NSString *str3 = [[NSString alloc] initWithUTF8String:"oc str3: hello world"];
//使用格式符创建OC字符串
NSString *str4 = [[NSString alloc]initWithFormat:@"oc str4:hello worl%c,%d",'d',4];
//创建临时字符串
NSString * str5 = [NSString stringWithUTF8String:"hello world"];
NSString * str6 = [NSString stringWithFormat:@"hello %d %c",4,'A'];
[str3 release];
[str4 release];
使用init创建的字符串对象,需要手动调用release方法释放对象所占用的内存。而临时字符串会自动释放。
3.NSString的一些方法
NSString *str7 = @"hello";
NSString *str8 = @"hello";
//1.比较字符串是否相同,相同未yes/1,不同为no/0
BOOL ret = [str7 isEqualToString:str8];
NSLog(@"%d",ret);
//2.比较字符串大小,结果为枚举类型,-1/0/1
NSComparisonResult ret2 =[str7 compare:str8];
if(ret2 == NSOrderedAscending){
NSLog(@"左边小");
}else if (ret2 == NSOrderedSame){
NSLog(@"相同");
}else if(ret2 == NSOrderedDescending){
NSLog(@"左边大");
}
//3.查找子 字符串
NSString * s1 = @"I am a very good man";
NSString * s2 = @"very";
//在s1中查找s2,获得s2的位置和长度
NSRange range = [s1 rangeOfString:s2];
NSLog(@"location:%lu length:%lu", range.location,range.length);
//4.截取已有字符串,生成新的字符串,原来的字符串不发生任何变化
NSString * s3 = @"0123456789";
NSString * s4 = [s3 substringToIndex:6];//[0,6)
NSString * s5 = [s3 substringFromIndex:6];//[6,end],从0开始数
NSRange range2 = {3, 4};//结构体第一个参数为起始位置,第二个为长度
NSString * s6 = [s3 substringWithRange:range2];//传入一个range结构体对象
NSString * s7 = [s3 substringWithRange:NSMakeRange(3, 4)];//直接创建一个range
NSLog(@"s1:%@",s1);
NSLog(@"s2:%@",s2);
NSLog(@"s3:%@",s3);
NSLog(@"s4:%@",s4);
NSLog(@"s5:%@",s5);
NSLog(@"s6:%@",s6);
NSLog(@"s7:%@",s7);
/*
2015-09-17 07:36:30.935 数据结构-NSString[2573:73722] s1:I am a very good man
2015-09-17 07:36:30.935 数据结构-NSString[2573:73722] s2:very
2015-09-17 07:36:30.935 数据结构-NSString[2573:73722] s3:0123456789
2015-09-17 07:36:30.935 数据结构-NSString[2573:73722] s4:012345
2015-09-17 07:36:30.935 数据结构-NSString[2573:73722] s5:6789
2015-09-17 07:36:30.936 数据结构-NSString[2573:73722] s6:3456
2015-09-17 07:36:30.936 数据结构-NSString[2573:73722] s7:3456
*/
三、NSMutableString的使用
NSMutableString类,可变字符串类的对象,内容可变,无外乎增删改查,对字符串内容进行修改。该类继承自NSString类,所以它除了能够使用NSString类的方法,还有一些自己独有的方法。
NSMutableString *s8 =@"hello";//这种做法是错误的
NSMutableString * s9 = [[NSMutableString alloc] initWithCapacity:10];//创建一个长度为10的可变字符串
NSMutableString * s10 = [[NSMutableString alloc] init];//创建一个空的可变字符串,然后给值
[s10 setString:@"hello"];//s10 =>"hello"
[s10 setString:@"world"];//s10=>"world",原来的内容被替换了
NSLog(@"s10: %@", s10);
//1.增,追加字符串
[s10 appendString:@" world"];
[s10 appendFormat:@"%c",'D'];
NSLog(@"s10 :%@", s10);//world worldD
//1.增,插入字符串
[s10 insertString:@"hello " atIndex:0];
NSLog(@"s10 :%@", s10);//hello world worldD
//2.删,delete
[s10 deleteCharactersInRange:NSMakeRange(3, 4)];
NSLog(@"s10 :%@",s10);//helorld worldD
//3.改,replace
[s10 replaceCharactersInRange:NSMakeRange(3, 2) withString:@"AB"];
NSLog(@"s10 :%@", s10);//helABld worldD
@诗未冷学习博客