可变字符串:NSMutableString
注:简单创建字符串的方式,创建出来的是不可变字符串
例如:
NSString *s20 = @"hello";//这整简单的创建就是创建的不可变字符串
NSMutableString *s21 = @"hello";//这种也是错误的,因为右边是NSString,左边是NSMutableString,是不相等的,会弹出警告,除非加上强制转换
NSMutableString *s22 = (NSMUtableString *)@"hello";//这句就加上了强制转换,能够消除黄色警告,但是要注意,s22的本质还是一个不可变的string,如果用来删除或者更改的话,还是会使程序崩溃
1、实例方法创建一个可变字符串
NSMutableString *stringM1 = [[NSMutableString alloc] initWithString:@"字符串"];
2、类方法创建一个可变字符串
NSMutableString *stringM2 = [NSMutableString stringWithString:stringM1];
3、格式化创建一个可变字符串
NSMutableString *stringM3 = [[NSMutableString alloc] initWithFormat:@"%@",stringM1];//这个是实例方法
NSMutableString *stringM4 = [NSMutableString stringWithFormat:@"%@",stringM1];//这个是类方法
4、可变字符串的替换
NSRange range1 = {0,2};//第一种方法
NSRange range2 = [stringM1 rangeOfString:@"字符"];//第二种方法
[stringM1 replaceCharactersInRange:range2 withString:@"羊肉"];//这里的range2可以换为range1,只是范围就需要自己去定义,比较麻烦,且不准确容易出错
5、可变字符串的插入(第一个参数是“插入的内容”,第二个参数是“插入的位置”)
[stringM1 insertString:@"我要吃" atIndex:0];//在0位置插入“我要吃”,0是第一位
6、可变字符串的删除
NSRange range4 = [stringM1 rangeOfString:@"要"];
//严谨写法
if(range4.location != NSNotFound){
[stringM1 deleteCharactersInRange:range4];
}//删除stringM1中的“要”字
7、可变字符串的追加
[stringM1 appendString:@"了"];//直接追加
[stringM1 appendFormat:@"%d块钱",10];//格式化追加,可以加多个参数
不可变数组NSArray
1、数组注意事项(数组元素必须是对象,不能是基本数据类型)
NSString *s1 = @"a";
NSString *s2 = @"b";
NSString *s3 = @"c";//定义三个字符串给后面用
2、创建数组,以nil表示结束
a、实例方法 创建数组
NSArray *array1 = [[NSArray alloc] initWithObjects:s1,s2,s3,nil];
b、类方法 创建数组
NSArray *array2 = [NSArray arrayWithObjects:s1,s2,s3,nil];
c、创建一个空数组
NSArray *array3 = [[NSArray alloc] init];//实例方法
NSArray *array4 = [NSArray array];//类方法
**NSArray *array5;//这个只是声明一个数组而已,不是创建**
d、创建只有一个对象的数组
NSArray *array6 = [NSArray arrayWithObject:s1];//注意这里是arrayWithObject.不带s
NSArray *array7 = [NSArray arrayWithObjects:s1,nil];
e、从其他数组中拷贝过来
NSArray *array6 = [NSArray arrayWithArray:array6];
f、新语法创建数组
NSArray *array9 = @[s1,s2,s3];
3、通过下标取元素
NSString *tempS1 = [array1 objectAtIndex:0];
NSString *tempS2 = array[0];//是上一行的升级版
4、获取数组的个数
NSInteger len1 = [array1 count];
NSInteger len2 = array1.count;//一般用此方法
5、判断数组是否包含了某元素
NSString *s1 = @"abc";
NSString *s2 = @"def";
NSString *s3 = @"ghi";
NSArray *array1 = [NSArray arrayWithObjects:s1,s2,s3,nil];
NSString trmpStr1 = @"def";
BOOL isCom = [array1 containsObject:tempStr1];//返回值为bool,有就返回1
6、通过元素取下标
NSString *tempStr2 = @"ghi";
//严谨写法
if([array1 containsObject:tempStr2]){
NSUInteger index = [array1 indexOfObject:tempStr2];
NSLog(@"%ld",index);
}
7、数组连成字符串(数组—–>字符串) 要求:数组元素必须是字符串
NSString *string1 = [array1 componentsJoinedByString:@"~"];//这里的~就是连接符,写的q就是q连接,写什么就用什么连接,连接效果为a~b~c
8、字符串——–>数组
NSArray *array6 = [string1 componentsSeparatedByString:@"~"];//这里的~要与上面数组变字符串对应,如果与上面不对应的话,就会被分割成一个字符串元素的数组("a~b~c")
9、访问数组最后一个元素
NSString *tempStr3 = [array1 lastObject];
10、数组遍历
a、普通遍历(需要操作”下标“就使用此种)
for(int i = 0;i < array1.count;i++){
NSString *str = array[i]//等价于[array ObjectAtIndex:i]
NSLog(@"%@",str);
}
b、快速遍历
for(NSString *str1 in array1){
NSLog(@"%@",str1);
}
11、给数组追加元素
NSArray *array12 = [array1 arrayByAddingObject:@"tom"];//给array1数组添加一个tom元素
使用数组需要注意的地方
1.数组元素只能是对象,不能是基本数据类型
2.防止数组越界
1、数组元素只能是对象,不能是基本数据类型
int i = 10;
float j = 20.22;
//int ------> NSString
NSString *intStr = [NSString stringWithFormat:@"%d",i];
NSString *floatStr = [NSString stringWithFormat:@"%f",j];
NSArray *array87 = @[@intStr,@floatStr];
//新语法 @表示字符串,把基本数据类型转换成字符串类型
NSArray *array88 = [NSArray arrayWithObjects:@"er",@12,@13,nil];
2、防止数组越界
int index = 2;
if(index < array1.count){
NSString *string4 = [array1 objectAtIndex:index];//也可以改为array1[index]
NSLog(@"%@",string4);
}else{
NSLog(@"数组已经越界");
}
// 数组越界的错误信息
// *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 5 beyond bounds [0 .. 2]'
可变数组 NSMutableArray
1、可变数组的创建
NSMutableArray *arrayM1 = [[NSMutableArray alloc] initWithObjects:s1,s2,s3,nil];//实例方法创建
NSMutableArray *arrayM2 = [NSMutableArray arrayWithObjects:s1,s2,s3,nil];//类方法创建
NSMutableArray *arrayM3 = @[s1,s2,s3];//这样创建的依旧是不可变的数组
//创建空数组
NSMutableArray *array = [[NSMutableArray alloc] init];
NSMutableArray *array1 = [NSMutableArray array];
2、添加元素
a、添加一个字符串元素
[arrayM1 addObject:s1];
b、添加一个数组元素,也叫作二维数组(数组里面嵌套数组,但是嵌套进去的数组只算原数组的一个元素,算总数的时候只当做一个元素计算)
[arrayM1 addObject:arrayM2];
3、删除元素
a、通过下标删除元素
[arrayM1 removeObjectAtIndex:0];//删除位置为0的元素
b、通过元素名称删除元素
//删除所有名为jack的元素,注意,但不会删除嵌套数组里的jack
NSString *str = @"jack";
[arrayM1 removeObject:str];
c、删除最后一个元素
[arrayM1 removeLastObject];
d、删除所有元素
[arrayM1 removeAllObject];
4、数组交换位置
a、通过下标来交换位置
[arrayM1 exchangeObjectAtIndex:2 WithObjectAtIndex:0];//交换0和2位置的元素
b、数组替换
[arrayM1 replaceObjectAtIndex:0 withObject:@"json"];//将0位置的元素换为json
5、数组的插入
[arrayM1 insertObject:@"make" atIndex:2];//在第2的位置插入一个“make”
6、数组的遍历
a、普通遍历
for(int i = 0; i< arrayM1.count; i++){
NSString *str = [arrayM1 objectAtIndex:i]//简写为arrayM1[i]
NSLog(@"%@",str1);
}
b、快速遍历
for(NSString *str2 in arrayM1){
NSLog(@"%@",str2);
}
//注意:要想查看数组中的中文,只能使用遍历的方式来打印查看,直接使用NSLog是没办法查看的,会显示16进制代码
NSArray *arrayM9 = @[@"大人",@"小孩"];
for(NSString *str3 in arrayM9){
NSLog(@"%@",str3);
}