字符串(NSString&NSMutableString)
在OC中的字符串可分为两种:不可变字符串(NSString)和不可变字符串(NSMutableString)。从字面上就可以理解这两种字符串的区别。
▲不可变字符串(NSString)
1.创建
①静态
NSString *str = @"Hello World!";
②用alloc创建空字符串对象 (对象方法『-』)
NSString *str = [[[NSString alloc] init] autorelease];
③用alloc创建有初始值的字符串对象 (对象方法『-』)
NSString *str = [[[NSString alloc] initWithString: @"Hello World!"] autorelease];
④不需要自己控制内存(工厂方法、便利器方法) (类方法『+』)
NSString *str = [NSString stringWithString:@"Hello World!"];
⑤字符串按一定格式『拼接』,这个的用法很像『NSLog』.
int age = 20, height = 170;
NSString *str = [NSString stringWithFormat:@"age=%d height=%d", age, height];
2.获取字符串长度 length
NSUInteger length = str.length;(NSUInteger length = strlen(str);)
3.获取子字符串
①substringFromIndex; 从哪个索引值开始获取
②substringToIndex; 一直获取到哪个索引值
③substringWithRange; 从哪个索引值开始获取多长的字符串
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
因为NSRange是一个结构体,所以在定义这个类型变量的时候不用指针(*)。
eg:NSRange range = NSMakeRange(4, 8);
4.字符串的比较
①isEqualToString:
②compare:
typedef enum{
NSOrderedAscending = -1, 『上升』前者比后者小
NSOrderedSame,
NSOrderedDescending 『下降』前者比后者大
}NSComparisonResult;
5.查找字符串
①hasPrefix: 在第一个查找
②hasSuffix: 在最后一个查找
③rangeOfString: 在中间查找
6.字符串转化为相应的数据类型
①intValue 转化为整型,这里需要注意的是,转化的字符串只能为整型。如果在整型前面有字符串,则转化完的值为0;转化的值后面(空格隔开)则不进行转化。
②floatValue
③doubleValue
④boolValue
eg:NSString *numStr = @"12.3";
int num = [numStr intValue];
▲可变字符串(NSMutableString)
@interface NSMutableString : NSString{ (说明NSMutableString是继承NSString的)
}
1.创建可变字符串
NSMutableString *mStr = [NSMutableString stringWithCapacity:0]; 暂时分配0个空间,当空间不够是自动追加
NSMutableString *mStr = [[NSSMutableString alloc] initWithCapacity:0];
2.追加字符串
[mStr appendString:@"追加内容"];
[mStr appendString:@"我要追加%d个内容", num];
3.插入字符串
[mStr insertString:@"1", atIndex:2];
[mStr insertString:@"1", atIndex:mStr.length]; 在mStr末尾插入
4.字符串的替换
NSRange range = [mStr rangOfString:@"需要被替换的内容"];
[mStr replaceCharactersInRange:range withString:@"需要替换的内容"]; 这里的range和上面是一样的
5.删除一个字符串
[mStr deleteCharactersInRange:range];
6.重新设置字符串的内容
[mStr setString:@"重新设置的内容"];
数组(NSArray&NSMutableArray)
▲不可变数组(NSArray)
C语言中的数组只能存放同一种基本数据类型,而OC中的数组可以存放多种数据类型(但是必须是对象类型,不能存放基本数据类型)。
注意:我们在实际编程过程中,应尽量在一个数组里存放同一种数据类型
#import "Person.h"
Person *xiaowang = [[[Person alloc] init] autorelease];
Person *zhangsan = [[[Person alloc] init] autorelease];
1.创建一个数组
①NSArray *array = @[@"xiaoming", xiaowang, zhangsan];
NSArray *array_1 = @[array, @"xml", @"xmh"];
②NSArray *array_2 = [NSArray array];
NSArray *array_3 = [[NSArray alloc] init];
③NSArray *array_4 = [NSArray arrayWithArray:array];
NSArray *array_5 = [[NSArray alloc] initWithArray:array]; (冒号后面的『array』就是@[@"xiaoming", xiaowang, zhangsan])
④创建的时候初始化一部分数据
NSArray *array_6 = [NSArray arrayWithObject:xiaowang];
数组结尾为nil,不能向数组里面添加一个值为nil的对象
NSArray *array_7 = [NSArray arrayWithObjects:xiaoming, zhangsan, nil];
2.获取数组元素的个数 count
NSLog(@"The count of the array is %ld.", [array count]);
3.获取相应位置的元素(对象)
Person *temp = [array_7 objectAtIndex:0];
Person *temp_1 = [array_7 lastObject]; 获取最后一个对象
Person *temp_2 = [array_7 firstObject]; 获取第一个对象
4.遍历数组
①正常方法,需要记录位置时用
for (int i = 0; i < array_7.count; i ++){
NSLog(@"%@", [array arrayAtIndex:i]);
}
②快速循环,不需要记录位置时用,一般常用的为这个
for (Person *temp in array_7){
NSLog(@"%@", temp)
}
5.判断一个数组是否包含一个对象
if ([array containsObject:@"asdfds"]){
NSLog(@"YES");
} else{
NSLog(@"NO");
}
6.获取某个对象在数组中的索引值
NSUInteger index = [array_7 indexOfObject:@"asdfds"]; 当数组中没有这样一个对象的时候,返回的将是一个极大的值
▲可变数组(NSMutableArray) 同样是继承于『NSArray』
1.创建可变数组
NSMutable *mArray = [NSMutable arrayWithCapacity:3];
2.增加对象
[mArray addObject:xiaoming];
3.插入对象
[mArray insetObject:array_4 atIndex:1];
4.删除对象
①[mArray removeObject:xiaoming];
②[mArray removeObjectAtIndex:3];
③删除所有对象
[mArray removeAllObjects];
5.交换对象的位置
[mArray exchangeObjectAtIndex:0 withObjectAtIndex:1];