Skip to content

Foundation字符串,集合类

qingkong1998 edited this page Sep 12, 2018 · 7 revisions

Foundation字符串,集合类

字符串[理解]

NSString

  • 概念: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
      • 带条件的比较
        • [str1 compare:str1 options:(NSStringCompareOptions)]
          • NSStringCompareOptions
            • NSCaseInsensitiveSearch
              • 不区分大小写
            • NSNumericSearch
              • 用于比较数字字符串,以数值的方式来比较
  • 字符串转换【理解】
    • 基本数据类型转换字符串
      • [NSString stringWithFormat:@"%d,%f,%lf,%c",10,10.1f,10.2,'a']
    • 字符串转基本数据类型
      • [str intValue];
        [str floatValue];
        [str doubleValue];
      • [str characterAtIndex:0]
    • 字符串所有字符全部转小写
      • [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";
          str2 = [str stringByReplacingOccurrencesOfString:@"-"withString:@""];
      • 【掌握】去掉两头的空格
        • [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]
          • NSCharacterSet
            • 代表一类字符,它提供了很多简洁的构造方法
            • whitespaceAndNewlineCharacterSet 表示空格和换行符
            • whitespaceCharacterSet 表示空格
            • characterSetWithCharactersInString: 通过字符串创建一个 NSCharacterSet
  • 字符串与路径【了解】
    • 是否是绝对路径
        • (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,服务器]/路径
    • 从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;
  • 字符串获取【理解】
    • 获取字符串的长度
      • str.length
    • 获取字符串中某个索引上的字符
      • [str characterAtIndex:1]
    • 获取子串
      • 获取从开始位置到某个索引的子串
        • [str substringToIndex:2]
      • 获取从某个索引开始到字符结尾的子串
        • [str substringFromIndex:2]
      • 获取某个区间的子串
        • [str substringWithRange:range]
          • NSRange
            • 它是一个结构体用来描述一个区间
            • 两个成员
              • location
                • 表示从那个位置开始
              • length
                • 表示从这个位置开始的长度
              • 如:itcast 中 ca 子串所在区间就是 location = 2 length = 2
            • NSRange的创建
              • NSRange range = {2,2};
              • NSRange range;
                range.location = 2;
                range.length = 2;
    • 获取某个子串所在的区间
      • 从前往后找找到的第一个子串的所在的区间
        • [str rangeOfString:@"it"]
      • 可以指定查找方式
        • [str rangeOfString:@"it" options:(NSStringCompareOptions)]
          • NSStringCompareOptions枚举类型
            • NSCaseInsensitiveSearch不区分大小写
            • NSLiteralSearch 一个字符一个字符的进行比较,严格区分打小写
            • NSBackwardsSearch 从后往前查找
            • NSRegularExpressionSearch 使用正则方式查找
    • 练习
      • 用3种方法将下面字符串中的中文截取出来
        传智播客

NSMutableString

  • 概念:表示可变的字符串,你可以在原来的串上添加、修改、删除操作,它使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";

集合类【掌握】

特点

  • 用于存储多个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:方法来判断对象是否相等的
    • 遍历数组
      • 普通的for 循环
      • 增强的for循环
        • for (CZPerson *p in array) {
          NSLog(@"%@",p.name);
          }
      • 使用block的方式
        • [array enumerateObjectsUsingBlock:^(CZPerson *person, NSUInteger idx, BOOL *stop) {
          NSLog(@"index = %zd,name = %@",idx,person.name);
          }];
      • 使用枚举器【几乎不用】
        • NSEnumerator *enumer = [array objectEnumerator];
          CZPerson *person;
          while (person = [enumer nextObject]) {
          NSLog(@"name = %@",person.name);
          }
    • 让数组中的所有元素执行某个方法
      • [array makeObjectsPerformSelector:@selector(run)];
        [array makeObjectsPerformSelector:@selector(eat:) withObject:@"狗不理包子"];
    • 排序
      • 使用选择器进行排序
        要求数组中的对象必须实现该选择器对应的方法,返回一个排好序的数组
        • 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 *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]];
    • 数组与字符串
      • 字符串转数组
        • NSString *str = @"a,b,c,d";
          NSArray *arr = [str componentsSeparatedByString:@","];
      • 数组转字符串
        • 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];
      • 初始化方法【不常用】
        • [[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];
      • 清空数组
        • [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--;
          }
          }
      • 可以通过先把要删除的数组放到一个新的数组中来,遍历完之后再删除它
        • 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];

ios开发技术

Clone this wiki locally