-
Notifications
You must be signed in to change notification settings - Fork 0
Foundation字符串,集合类
qingkong1998 edited this page Sep 12, 2018
·
7 revisions
- 概念:NSString是不可变字符串,所有它所有产生其他字符串方法都是生成一个新的字符串,而不会改变原来字符串
- 创建[掌握]
- 字面量
- NSString * str = @"abc"
- 对象方法
- NSString *str = [[NSString alloc] initWithUTF8String:"abc"]
- 类方法
- NSString *str = [NSString stringWithFormat:@"Jack"];
- 区别:通过字面的方式创建出来的对象保存在常量区,通过对象方法和类方法创建出来的对象保存着堆中
- 字面量
- 字符串判断与比较【掌握】
- 判断字符串是不为空
- str != nil && str.length !=0
- 判读两个字符串相等
- 判读两个字符串的地址相等
- str1 == str2
- 判断两个字符串内容相等
- [str1 isEqualToString str2]
- 自己实现一个判读字符内容相等的方法
- 第一步:如果两个字符串地址相等返回YES
- 第二步:一个字符一个字符的比较遇到不相等的字符就返回NO
- 第三步:返回YES
- 判读两个字符串的地址相等
- 判断开头结尾
- 判断字符串是否以某个字符串开头
- [str hasPrefix:@"www"]
- 判断字符串是否一个某个字符串结尾
- [str hasSuffix:@"cn"]
- 判断字符串是否以某个字符串开头
- 比较两个字符串
- 从前往后比较严格区分大小写
- [str1 compare:str2]
- NSComparisonResult
- NSOrderedSame
- str1 与 str2 内容相等
- NSOrderedAscending
- str1 小于 str2
- NSOrderedDescending
- str1 > str2
- NSOrderedSame
- NSComparisonResult
- [str1 compare:str2]
- 带条件的比较
- [str1 compare:str1 options:(NSStringCompareOptions)]
- NSStringCompareOptions
- NSCaseInsensitiveSearch
- 不区分大小写
- NSNumericSearch
- 用于比较数字字符串,以数值的方式来比较
- NSCaseInsensitiveSearch
- NSStringCompareOptions
- [str1 compare:str1 options:(NSStringCompareOptions)]
- 从前往后比较严格区分大小写
- 判断字符串是不为空
- 字符串转换【理解】
- 基本数据类型转换字符串
- [NSString stringWithFormat:@"%d,%f,%lf,%c",10,10.1f,10.2,'a']
- 字符串转基本数据类型
- [str intValue];
[str floatValue];
[str doubleValue]; - [str characterAtIndex:0]
- [str intValue];
- 字符串所有字符全部转小写
- [str lowercaseString]
- 字符串所有字符全部转大写
- [str uppercaseString]
- 字符串每个单词的首字母大写,两个单词之间需使用空格隔开
- [str4 capitalizedString]
- 如:today is good day -> Today Is Good Day
- 把C语言字符串转换为OC字符串
- [NSString stringWithCString:"Jack" encoding:NSUTF8StringEncoding];
- [[NSString alloc] initWithCString:"Jack" encoding:NSUTF8StringEncoding];
- 把OC字符串转换为C语言字符串
- [str cStringUsingEncoding:NSUTF8StringEncoding]
- 基本数据类型转换字符串
- 字符串替换【理解】
- 注意:此类字符串都是以stringBy开头,此类字符都生成一个新的字符串原有的字符串不变了
- 在原有字符串的末尾拼接另一个字符产生一个新的字符串
- [str1 stringByAppendingString: st2]
- 字符串替换
- 使用某个字符串替换掉原来字符串中某个区间的字符串
- [str stringByReplacingCharactersInRange:(NSRange) withString:(NSString *)]
- 使用一个新的字符串替换掉原来字符串中的某个子串
- str = @"www-itcast-cn";
str2 = [str stringByReplacingOccurrencesOfString:@"-"withString:@"."];
- str = @"www-itcast-cn";
- 删除原字符串中的所有指定的字符
- str = @"www-.itcast.-cn";
str2 = [str stringByReplacingOccurrencesOfString:@"-"withString:@""];
- str = @"www-.itcast.-cn";
- 【掌握】去掉两头的空格
- [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
- NSCharacterSet
- 代表一类字符,它提供了很多简洁的构造方法
- whitespaceAndNewlineCharacterSet 表示空格和换行符
- whitespaceCharacterSet 表示空格
- characterSetWithCharactersInString: 通过字符串创建一个 NSCharacterSet
- NSCharacterSet
- [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
- 使用某个字符串替换掉原来字符串中某个区间的字符串
- 字符串与路径【了解】
- 是否是绝对路径
-
- (BOOL)isAbsolutePath;
-
- 最后一部分路径
-
- (NSString *)lastPathComponent;
-
- 删除最后一部分路径
-
- (NSString *)stringByDeletingLastPathComponent
-
- 在原来的路径上拼接一个路径
-
- (NSString *)stringByAppendingPathComponent:(NSString *)str
-
- 获取文件的扩展名
-
- (NSString *)pathExtension;
-
- 删除文件的扩展名
-
- (NSString *)stringByDeletingPathExtension;
-
- 在文件末尾增加一个扩展名
-
- (NSString *)stringByAppendingPathExtension:(NSString *)str;
-
- 是否是绝对路径
- 字符串与文件【理解】
- 写入文件
-
NSError *error = nil; [str2 writeToFile:@"/Users/lideshan/Desktop/test.txt" atomically:YES encoding:NSUTF8StringEncoding error:&error]; if (error) { NSLog(@"%@",error); }else{ NSLog(@"写入成功"); }
-
- 读取文件
-
NSError *error = nil; NSString *str3 = [NSString stringWithContentsOfFile:@"/Users/lideshan/Desktop/test.txt" encoding:NSUTF8StringEncoding error:&error]; if (error) { NSLog(@"%@",error); }else{ NSLog(@"%@",str3); }
-
- 写入文件
- 字符串与URL【理解】
- URL
- 概念:Uniform Resource Locator 统一资源定位符
- URL格式:协议头://主机[IP,服务器]/路径
- 互联网
-
http://ios.itcast.cn/ios/images/content_25.jpg
http: 协议头,超文本传输协议,用于万维网[互联网]
ios.itscast.cn 主机域名,代表主机
/ios/images/content_25.jpg 图片在主机下面的绝对路径
-
http://ios.itcast.cn/ios/images/content_25.jpg
- 本地文件
-
file:///Users/lideshan/Desktop/test.txt
file:协议头,表示文件协议
由于文件都在保存在本机上,所以主机名称省略
路径:/Users/lideshan/Desktop/test.txt
-
file:///Users/lideshan/Desktop/test.txt
- 互联网
- 从URL中读取字符串
-
- (instancetype)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;
-
- 将字符串写入URL对应的资源中
-
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;
-
- URL
- 字符串获取【理解】
- 获取字符串的长度
- str.length
- 获取字符串中某个索引上的字符
- [str characterAtIndex:1]
- 获取子串
- 获取从开始位置到某个索引的子串
- [str substringToIndex:2]
- 获取从某个索引开始到字符结尾的子串
- [str substringFromIndex:2]
- 获取某个区间的子串
- [str substringWithRange:range]
- NSRange
- 它是一个结构体用来描述一个区间
- 两个成员
- location
- 表示从那个位置开始
- length
- 表示从这个位置开始的长度
- 如:itcast 中 ca 子串所在区间就是 location = 2 length = 2
- location
- NSRange的创建
- NSRange range = {2,2};
- NSRange range;
range.location = 2;
range.length = 2;
- NSRange
- [str substringWithRange:range]
- 获取从开始位置到某个索引的子串
- 获取某个子串所在的区间
- 从前往后找找到的第一个子串的所在的区间
- [str rangeOfString:@"it"]
- 可以指定查找方式
- [str rangeOfString:@"it" options:(NSStringCompareOptions)]
- NSStringCompareOptions枚举类型
- NSCaseInsensitiveSearch不区分大小写
- NSLiteralSearch 一个字符一个字符的进行比较,严格区分打小写
- NSBackwardsSearch 从后往前查找
- NSRegularExpressionSearch 使用正则方式查找
- NSStringCompareOptions枚举类型
- [str rangeOfString:@"it" options:(NSStringCompareOptions)]
- 从前往后找找到的第一个子串的所在的区间
- 练习
- 用3种方法将下面字符串中的中文截取出来
传智播客
- 用3种方法将下面字符串中的中文截取出来
- 获取字符串的长度
- 概念:表示可变的字符串,你可以在原来的串上添加、修改、删除操作,它使NSString的子类
- 末尾拼接字符串
-
- (void)appendString:(NSString *)aString;
-
- (void)appendFormat:(NSString *)format, ...
- 练习:1.利用NSString将10个itcast拼接起来, 中间用空格隔开, 最后写入文件中
2..利用NSMutableString将10个itcast拼接起来, 中间用空格隔开, 最后写入文件中
-
- 在某个位置插入一个字符串
-
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
-
- 使用新字符串替换字符串中的已有字符串
-
- (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
-
- (NSUInteger)replaceOccurrencesOfString:(NSString *)target withString:(NSString *)replacement options:(NSStringCompareOptions)options range:(NSRange)searchRange;
-
- 删除某个区间的字符串
-
- (void)deleteCharactersInRange:(NSRange)range;
-
- NSString转NSMutableString
-
- (void)setString:(NSString *)aString;
strM.string = @"abc";
- (void)setString:(NSString *)aString;
-
- 用于存储多个OC对象,相当于存储对象的容器,我们也称它们为容器类
- 只能存放OC对象不能存放基本数据类型、结构体、枚举
- 概念:有序的对象集合,可以存放任意的OC对象
- 特点
- 同一数组中可以存放不同的类型的对象
- 同一个对象可以被存入数组中多次
- 不能存放基本数据类型,基本数据类型需要转换成其包装类型,然后再存放到数组中
- 数组中的元素是有序的
- 通常我们在一个数组中只存储一种类型的对象,便于批量操作
- NSArray
- 概念:不可变数组,一经创建就不能添加,删除,修改其中的元素,
- 创建
- 类方法
- NSArray *array = [NSArray arrayWithObjects:@1,@2,@3,nil];
- 初始化方法
- NSArray *array = [[NSArray alloc] initWithObjects:p1,p2, nil];
- 快捷方式
- NSArray *array = @[@1,@2,@3];
- 类方法
- 访问其中的元素
- 通过对象方法
- [array objectAtIndex:0]
- 快捷方式
- array[0]
- 通过对象方法
- 获取数组的长度
- [array count]
- array.count
- 判断数组中是否包含某个对象
- [array containsObject:p1]
- 这里是通过调用isEqual:方法来判断对象是否相等的
- [array containsObject:p1]
- 遍历数组
- 普通的for 循环
- 增强的for循环
- for (CZPerson *p in array) {
NSLog(@"%@",p.name);
}
- for (CZPerson *p in array) {
- 使用block的方式
- [array enumerateObjectsUsingBlock:^(CZPerson *person, NSUInteger idx, BOOL *stop) {
NSLog(@"index = %zd,name = %@",idx,person.name);
}];
- [array enumerateObjectsUsingBlock:^(CZPerson *person, NSUInteger idx, BOOL *stop) {
- 使用枚举器【几乎不用】
- NSEnumerator *enumer = [array objectEnumerator];
CZPerson *person;
while (person = [enumer nextObject]) {
NSLog(@"name = %@",person.name);
}
- NSEnumerator *enumer = [array objectEnumerator];
- 让数组中的所有元素执行某个方法
- [array makeObjectsPerformSelector:@selector(run)];
[array makeObjectsPerformSelector:@selector(eat:) withObject:@"狗不理包子"];
- [array makeObjectsPerformSelector:@selector(run)];
- 排序
- 使用选择器进行排序
要求数组中的对象必须实现该选择器对应的方法,返回一个排好序的数组- NSArray *sortedArray = [array sortedArrayUsingSelector:@selector(compare:)];
- 使用比较器block
要求该block种必须返回
NSComparisonResult枚举的成员- NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(CZPerson * obj1, CZPerson * obj2) {
return [obj1.name compare:obj2.name];
}];
- NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(CZPerson * obj1, CZPerson * obj2) {
- 使用属性描述器
这里属性必须是可排序的
按照顺序比较各个属性- NSArray *array = [[NSArray alloc] initWithObjects:p1,p2, nil];
NSSortDescriptor *d1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
NSSortDescriptor *d2 = [NSSortDescriptor sortDescriptorWithKey:@"name"ascending:YES];
NSArray * sortedArray = [array sortedArrayUsingDescriptors:@[d1,d2]];
- NSArray *array = [[NSArray alloc] initWithObjects:p1,p2, nil];
- 使用选择器进行排序
- 数组与字符串
- 字符串转数组
- NSString *str = @"a,b,c,d";
NSArray *arr = [str componentsSeparatedByString:@","];
- NSString *str = @"a,b,c,d";
- 数组转字符串
- NSString *str1 = [array componentsJoinedByString:@"-"];
- 字符串转数组
- 数组与文件
- 数组写入文件
- [arr writeToFile:@"/Users/lideshan/Desktop/test.txt" atomically:YES];
- 从文件中读取数组
- NSArray *array = [NSArray arrayWithContentsOfFile:@"/Users/lideshan/Desktop/test.txt"];
- 数组写入文件
- NSMutableArray
- 概念:可变数组,继承NSArray
可变数组支持插入,删除,修改的操作 - 创建
- 快捷构造方法【常用】
- 创建一个空数组,数组容量为0
- NSMutableArray *arrayM = [NSMutableArray array]
- 创建一个容量为10的空数组
这个容量并不是说数组中只能存放10个元素
而是一开始就将数组初始化为10个元素,不够用可以动态的增加,这样可以提高效率- NSMutableArray *arrayM = [NSMutableArray arrayWithCapacity:10];
- 创建一个空数组,数组容量为0
- 初始化方法【不常用】
- [[NSMutableArray alloc] init];
- 注意:可变数组不能使用@[p1,p2]方式创建,这种简便的方式只能用于创建不可变数组
- 快捷构造方法【常用】
- 在末尾添加元素
- [arrayM addObject:p1];
- 在某个索引插入元素
- [arrayM insertObject:p1 atIndex:1];
- 删除元素
- 删除某个索引位置的元素
注意不要让数组下标越界- [arrayM removeObjectAtIndex:1]
- 删除某个对象,
根据isEqual方法进行比较与给定对象相等的都会被删除- [arrayM removeObject:p1]
- 删除数组中某个区间的元素
注意不要让数组下标越界- NSRange range = {1,1};
[arrayM removeObjectsInRange:range];
- NSRange range = {1,1};
- 清空数组
- [arrayM removeAllObjects];
- 删除某个索引位置的元素
- 遍历并删除数组
- 不可以使用枚举器的方式遍历的同时删除数组
- 不可以forin的方式遍历的同时删除数组
- 不可以使用block的方法遍历的同时删除数组
- 可以通过普通的for循环遍历的同时删除数组
删除一个元素后要把i--- for (int i = 0; i < arrayM.count; i++) {
CZPerson *person = arrayM[i];
if (person.age == 0) {
[arrayM removeObjectAtIndex:i];
i--;
}
}
- for (int i = 0; i < arrayM.count; i++) {
- 可以通过先把要删除的数组放到一个新的数组中来,遍历完之后再删除它
-
NSMutableArray *temp = [NSMutableArray array]; for (CZPerson *person in arrayM) { if (person.age == 0) { [temp addObject:person]; } } [arrayM removeObjectsInArray:temp];
-
- NSArray 转 NSMutableArray
-
- (void)setArray:(NSArray *)otherArray;
arrayM.array = @[@1,@2];
- (void)setArray:(NSArray *)otherArray;
-
- 概念:可变数组,继承NSArray
- 作者:qingkong 链接: https://github.com/qingkong1998/ios/wiki github微博:https://qingkong1998.github.io/ https://qingkong1998.github.io/ios/
- 来源:晴空 商业转载请联系作者获得授权,非商业转载请注明出处。