objective-c第三天 可变字符串和数组

可变字符串: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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值