黑马程序员--OC之Foundation框架的使用<二>
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1、NSMutableString 介绍和使用
1)NSMutableString 基本概念
NSMutableString类继承NSString类,那么NSString提供的方法在NSMutableString中基本都可以使用,
NSMutableString好比一个字符串链表,它可以任意的动态在字符串中添加字符串删除字符串指定位置插入字符串,使
用它来操作字符串会更加灵活。
NSString是不可变的, 里面的文字内容是不能进行修改的
NSMutableString是可变的, 里面的文字内容可以随时更改
NSMutableString和NSString的区别
NSMutableString能使用NSString的所有方法
2)字符串的可变和不可变
不可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生变化
可变:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改
可变字符串:
指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改
3)NSMutableString 常用方法
通过调用string方法, 创建一个空的NSMutableString
-(void)appendString:(NSString *)aString;
拼接aString到最后面
-(void)appendFormat:(NSString *)format, ...;
拼接一段格式化字符串到最后面
-(void)deleteCharactersInRange:(NSRange)range;
删除range范围内的字符串。一般可以配合rangeOfString删除
-(void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
在loc这个位置中插入aString
-(void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
使用aString替换range范围内的字符串,一般不是以string开头的一般都不会产生一个新的字符串。
replaceOccurrencesOfString方法不需要传范围参数。
4)字符串使用注意事项
@”hello”这种方式创建的字符串始终是NSString,不是NSMutalbeString.所以下面的代码创建的还是NSString,此时
使用可变字符串的函数,无法操作字符串。
NSMutalbeString *s1 = @”hello”;
NSMutableString的string属性:会将源对象的所有字符串都覆盖掉。
.string 属性可以修改字符串的内容
开发中到底使用NSString还是NSMutableString?
开发中绝大多数用到的都是NSString
只是如果需要做特殊处理的时候(截取、拼接、替换)等操作,才考虑使用NSMutableString
位枚举,枚举值是2的0次方、1次方、2次方......
NSString *s1 = @"hello";
NSRange range = [s1 rangeOfString:@"o" options:0range:NSMakeRange(0, 5)];
if (range.location == NSNotFound) {
NSLog(@"没有找到。");
}else {
NSLog(@"location = %ld, length = %ld", range.location, range.length);
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSMutableString *str = [NSMutableString string];
//appendFormat格式化添加一个字符串
[str appendFormat:@"你好黑马%d",666];
//删除一个字符串
[str deleteCharactersInRange:NSMakeRange(2,3)];
NSLog(@"%@",str);
//插入一个字符串
[str insertString:@"黑马6" atIndex:2];
NSLog(@"%@",str);
//替换字符串
[str replaceCharactersInRange:NSMakeRange(2, 2) withString:@"老师"];
NSLog(@"%@",str);
//错误事例如下:
//给可变的字符串赋值一个不可变得值
/*NSString *str = @"nihao";
NSMutableString *str =@"nihao";
str appendFormat:@"heima";
*/
NSMutableString *str1 =[NSMutableString stringWithFormat:@"abc"];
//用空格替换abc
str1.string = @"";
[str1 appendFormat:@"def"];
NSLog(@"%@",str1);
}
return 0;
}
2、NSArray 的介绍和基本使用
1)什么是NSArray?
NSArray是OC中的数组类, 开发中建议尽量使用NSArray替代C语言中的数组
C语言中数组的弊端
int array[4] = {10, 89, 27, 76};
只能存放一种类型的数据.(类型必须一致)
不能很方便地动态添加数组元素、不能很方便地动态删除数组元素(长度固定)
2)NSArray的使用注意
只能存放任意OC对象, 并且是有顺序的
不能存储非OC对象, 比如int\float\double\char\enum\struct等
它是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素
3)NSArray的类方法创建
+ (instancetype)array;
+ (instancetype)arrayWithObject:(id)anObject;
+ (instancetype)arrayWithObjects:(id)firstObj, ...;
+ (instancetype)arrayWithObjects:(id)firstObj, ...;
+ (instancetype)arrayWithArray:(NSArray *)array;
+ (id)arrayWithContentsOfFile:(NSString *)path; // 读取一个xml文件.
+(id)arrayWithContentsOfURL:(NSURL *)url; // 读取一个xml文件.
4)数组使用注意:
NSArray直接使用NSLog()作为字符串输出时是小括号括起来的形式。
NSArray中不能存储nil,因为NSArray认为nil是数组的结束(nil是数组元素结束的标记)。nil就是0。0也是基本数据
类型,不能存放到NSArray中。
5)NSArray的常见用法
-(NSUInteger)count;
获取集合元素个数
-(id)objectAtIndex:(NSUInteger)index;
获得index位置的元素
-(BOOL)containsObject:(id)anObject;
是否包含某一个元素
-(id)lastObject;
返回最后一个元素
-(id)firstObject;
返回最后一个元素
-(NSUInteger)indexOfObject:(id)anObject;
查找anObject元素在数组中的位置(如果找不到,返回-1)NSNotFound
-(NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
在range范围内查找anObject元素在数组中的位置
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//NSArray特点:一旦创建成功,内容不可改变
//只能存放OC对象
// 创建一个数组
NSArray *arr1 = [NSArray array];//这样的数组永远是空,不可能象其中增加值
//创建数组只有一个元素
NSArray *arr2 = [NSArray arrayWithObject:@"1"];
//创建数组有多个元素
NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@"three",nil];
//调用对象方法创建数组
NSArray *arr4 =[[NSArray alloc]initWithObjects:@"one",@"two",@"three", nil];
//用一个数组创建另一个数组
NSArray *arr5 = [NSArray arrayWithArray:arr2];
NSLog(@"arr1=%@",arr1);
NSLog(@"arr2=%@",arr2);
NSLog(@"arr3=%@",arr3);
NSLog(@"arr4=%@",arr4);
NSLog(@"arr5=%@",arr5);
//1)获取数组的长度,count代表数组元素的个数
NSLog(@"arr3的长度为:%ld",arr3.count);
//2)根据下标,获取下标对应的对象
NSLog(@"%@",[arr3 objectAtIndex:2]);
//返回元素的下标
NSUInteger loc = [arr3 indexOfObject:@"three"];
NSLog(@"%ld",loc);
if ([arr3 containsObject:@"four"]){
NSLog(@"包含此字符");
}else NSLog(@"不包含此字符");
//用简化的方法定义和访问数组元素
//1)简化的方式定义数组
NSArray *arr6 = @[@"1",@"2",@"3"];
NSLog(@"arr6=%@",arr6);
NSString *str = [arr6 objectAtIndex:2];
NSLog(@"数组元素为2的字符串为:%@",str);
str =arr6[1];
NSLog(@"数组元素为1的字符串为:%@",str);
}
return 0;
}