再探Objective-C.9

来源:互联网 发布:java ee的jdk 编辑:程序博客网 时间:2024/06/01 10:46

•          本章是OC Foundation里面的字符串类和集合类

•                        字符串[常用]

•                                      NSString

•                                                     概念:NSString是不可变字符串,所有它所有产生其他字符串方法都是生成一个新的字符串,而不会改变原来字符串

•                                                     创建[常用]

•                                                                   字面量

•                                                                                 NSString * str = @"abc"

•                                                                   对象方法

•                                                                                 NSString *str = [[NSString alloc]initWithUTF8String:"abc"]

•                                                                   类方法

•                                                                                 NSString *str = [NSString stringWithFormat:@"Jack"];

•                                                                   区别:通过字面的方式创建出来的对象保存在常量区,通过对象方法和类方法创建出来的对象保存着堆中

•                                                     字符串获取【常用】

•                                                                   获取字符串的长度

•                                                                                 str.length

•                                                                   获取字符串中某个索引上的字符

•                                                                                 [str characterAtIndex:1]

•                                                                   获取子串

•                                                                                 获取从开始位置到某个索引的子串

•                                                                                                [strsubstringToIndex:2]

•                                                                                 获取从某个索引开始到字符结尾的子串

•                                                                                                [strsubstringToIndex:2]

•                                                                                 获取某个区间的子串

•                                                                                               [str substringWithRange:range]

•                                                                                                             NSRange

•                                                                                                                           它是一个结构体用来描述一个区间

•                                                                                                                           两个成员

                                                                                                                                             location

                                                                                                                                                           表示从那个位置开始

                                                                                                                                             length

                                                                                                                                                           表示从这个位置开始的长度

                                                                                                                                             如:aabbcc   中 ca 子串所在区间就是 location = 2  length = 2

•                                                                                                                           NSRange的创建

                                                                                                                                             NSRange range = {2,2};

                                                                                                                                              NSRange range;

                                                                                                                                              range.location = 2;

                                                                       range.length = 2;

•                                                                  获取某个子串所在的区间

•                                                                                从前往后找找到的第一个子串的所在的区间

•                                                                                               [str rangeOfString:@"it"]

•                                                                                可以指定查找方式

•                                                                                              [strrangeOfString:@"it" options:(NSStringCompareOptions)]

•                                                      NSStringCompareOptions枚举类型

•                                                             NSCaseInsensitiveSearch不区分大小写

•                                                             NSLiteralSearch 一个字符一个字符的进行比较,严格区分打小写

•                                                             NSBackwardsSearch 从后往前查找

•                                                             NSRegularExpressionSearch 使用正则方式查找

•                                                                  练习

•                                                                                  用3种方法将下面字符串中的中文截取出来

•                                                                                 <aabbcc>aabbcc</aabbcc>

•                                                    字符串判断与比较【常用】

•                                                                  判断字符串是不为空

•                                                                                str != nil &&str.length !=0

•                                                                  判读两个字符相等

•                                                                                判读两个字符串的地址相等

•                                                                                              str1 = str2

•                                                                                判断两个字符串内容相等

•                                                                                              [str1 isEqualToString str2]

•                                                                                自己实现一个判读字符内容相等的方法

•                                                                                              第一步:如果两个字符串地址相等返回YES

•                                                                                              第二步:一个字符一个字符的比较遇到不相等的字符就返回NO

•                                                                                              第三步:返回YES

•                                                                  判断开头结尾

•                                                                                判断字符串是否以某个字符串开头

•                                                                                              [strhasPrefix:@"www"]

•                                                                                判断字符串是否一个某个字符串结尾

•                                                                                              [strhasSuffix:@"cn"]

•                                                                  比较两个字符串

•                                                                                从前往后比较严格区分大小写

•                                                                                              [str1 compare:str2]

•                                                                                                            NSComparisonResult

•                                                                                                                          NSOrderedSame

                                                                                                                                             str1 与 str2 内容相等

•                                                                                                                          NSOrderedAscending

                                                                                                                                             str1 小于 str2

•                                                                                                                          NSOrderedDescending

                                                                                                                                             str1 > str2

•                                                                                带条件的比较

•                                                                                               [str1 compare:str1options:(NSStringCompareOptions)]

•                                                                                                            NSStringCompareOptions

•                                                                                                                          NSCaseInsensitiveSearch

                                                                                                                                             不区分大小写

•                                                                                                                          NSNumericSearch

                                                                                                                                             用于比较数字字符串,以数值的方式来比较

•                                                    字符串转换【常用】

•                                                                  基本数据类型转换字符串

•                                                                                 [NSStringstringWithFormat:@"%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语言字符串

•                                                                                 [strcStringUsingEncoding:NSUTF8StringEncoding]

•                                                     字符串替换【常用】

•                                                                   注意:此类字符串都是以stringBy开头,此类字符都生成一个新的字符串原有的字符串不变了

•                                                                   在原有字符串的末尾拼接另一个字符产生一个新的字符串

•                                                                                [str1 stringByAppendingString:st2]

•                                                                  字符串替换

•                                                                                使用某个字符串替换掉原来字符串中某个区间的字符串

•                                                                                                [strstringByReplacingCharactersInRange:(NSRange) withString:(NSString *)]

•                                                                                使用一个新的字符串替换掉原来字符串中的某个子串

•                                                                                                str =@"www-aabbcc-cn";

•                                                                                                str2 = [str stringByReplacingOccurrencesOfString:@"-"withString:@"."];

•                                                                                 删除原字符串中的所有指定的字符

•                                                                                                str = @"www-.aabbcc.-cn";

•                                               str2 = [strstringByReplacingOccurrencesOfString:@"-"withString:@""];

•                                                                                【常用】去掉两头的空格

•                                                                                              [strstringByTrimmingCharactersInSet:[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;

•                                                                                     [str2writeToFile:@"/Users/lideshan/Desktop/test.txt" atomically:YESencoding:NSUTF8StringEncoding error:&error];

•                                                                                          if (error) {

•                                                                                              NSLog(@"%@",error);

•                                                                                          }else{

•                                                                                              NSLog(@"写入成功");

•                                                }

•                                                                  读取文件

•                                                                                          NSError *error;

•                                                                                    NSString *str3 = [NSStringstringWithContentsOfFile:@"/Users/lideshan/Desktop/test.txt"  encoding:NSUTF8StringEncodingerror:&error];

•                                                                                          if (error) {

•                                                                                              NSLog(@"%@",error);

•                                                                                          }else{

•                                                                                              NSLog(@"%@",str3);

•                                                                                         }

•                                                     字符串与URL【常用】

•                                                                   URL

•                                                                                  概念:Uniform Resource Locator 统一资源定位符

•                                                                                  URL格式:协议头://主机[IP,服务器]/路径

•                                                                                                互联网

•                                                                                                              http://ios.aabbcc.cn/ios/images/content_25.jpg

•                                                                                                              http: 协议头,超文本传输协议,用于万维网[互联网]

•                                                                                                              ios.itscast.cn 主机域名,代表主机

•                                                                                                              /ios/images/content_25.jpg 图片在主机下面的绝对路径

•                                                                                                本地文件

•                                                                                                              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)useAuxiliaryFileencoding:(NSStringEncoding)enc error:(NSError **)error;

•                  NSMutableString

•                                                    概念:表示可变的字符串,你可以在原来的串上添加、修改、删除操作,它使NSString的子类

•                                                    末尾拼接字符串

•                                 - (void)appendString:(NSString *)aString;

•                                 - (void)appendFormat:(NSString *)format, ...

•                                                                     练习:1.利用NSString10aabbcc拼接起来,中间用空格隔开, 最后写入文件中

•                                          2..利用NSMutableString10aabbcc拼接起来,中间用空格隔开, 最后写入文件中

•                                                    在某个位置插入一个字符串

•                                 - (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;

•                          NSStringNSMutableString

•                                                                    - (void)setString:(NSString *)aString;

•                                  strM.string = @"abc";

•                       集合类【常用】

•                                     特点

•                                                    用于存储多个OC对象,相当于存储对象的容器,我们也称它们为容器类

•                                                    只能存放OC对象不能存放基本数据类型、结构体、枚举

•                                     数组

•                                                    概念:有序的对象集合,可以存放任意的OC对象

•                                                    特点

•                                                                  同一数组中可以存放不同的类型的对象

•                                                                  同一个对象可以被存入数组中多次

•                                                                  不能存放基本数据类型,基本数据类型需要转换成其包装类型,然后再存放到数组中

•                                                                  数组中的元素是有序的

•                                                                  通常我们在一个数组中只存储一种类型的对象,便于批量操作

•                                                    NSArray

•                                                                  概念:不可变数组,一经创建就不能添加,删除,修改其中的元素,

•                                                                  创建

•                                                                                类方法

•                                                NSArray *array = [NSArrayarrayWithObjects:@1,@2,@3,nil];

•                                                                                初始化方法

•                                               NSArray *array =  [[NSArrayalloc] 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*pin array) {

•                                                                                                     NSLog(@"%@",p.name);

•                                                }

•                                                                                使用block的方式

•                                                                                                 [arrayenumerateObjectsUsingBlock:^(CZPerson *person,NSUIntegeridx, BOOL *stop) {

•                                                                                                            NSLog(@"index =%zd,name = %@",idx,person.name);

•                                                       }];

•                                                                                使用枚举器【几乎不用】

•                                                                                                  NSEnumerator *enumer =  [arrayobjectEnumerator];

•                                                                                                  CZPerson *person;

•                                                                                                  while (person = [enumernextObject]){

•                                                                                                       NSLog(@"name =%@",person.name);

•                                                 }

•                                                                  让数组中的所有元素执行某个方法

•                                                                                  [arraymakeObjectsPerformSelector:@selector(run)];

•                                        [array makeObjectsPerformSelector:@selector(eat:)withObject:@"狗不理包子"];

•                                                                  排序

•                                                                                  使用选择器进行排序

•                                                                                 要求数组中的对象必须实现该选择器对应的方法,返回一个排好序的数组

•                                                NSArray *sortedArray  = [arraysortedArrayUsingSelector:@selector(compare:)];

•                                                                                  使用比较器block

•                                                                                  要求该block种必须返回

•                                                                                NSComparisonResult枚举的成员

•                                                                                                  NSArray *sortedArray  = [arraysortedArrayUsingComparator:^NSComparisonResult(CZPerson* obj1,CZPerson * obj2) {

•                                                                                                          return [obj1.namecompare:obj2.name];

•                                                 }];

•                                                                                  使用属性描述器

•                                                                                  这里属性必须是可排序的

•                                                                                 按照顺序比较各个属性

•                                                                                                NSArray *array =  [[NSArrayalloc] initWithObjects:p1,p2,nil];

•                                                                                                NSSortDescriptor *d1 = [NSSortDescriptorsortDescriptorWithKey:@"age"ascending:YES];

•                                                                                                NSSortDescriptor *d2 = [NSSortDescriptorsortDescriptorWithKey:@"name"ascending:YES];

•                                               NSArray * sortedArray = [arraysortedArrayUsingDescriptors:@[d1,d2]];

•                                                                  数组与字符串

•                                                                                字符串转数组

•                                                                                                 NSString *str =@"a,b,c,d";

•                                                NSArray *arr = [strcomponentsSeparatedByString:@","];

•                                                                                数组转字符串

•                                                NSString *str1 = [arraycomponentsJoinedByString:@"-"];

•                                                                  数组与文件

•                                                                                数组写入文件

•                                               [arr writeToFile:@"/Users/lideshan/Desktop/test.txt"atomically:YES];

•                                                                                从文件中读取数组

•                                               NSArray *array = [NSArrayarrayWithContentsOfFile:@"/Users/lideshan/Desktop/test.txt"];

•                                                    NSMutableArray

•                                                                    概念:可变数组,继承NSArray

•                                                                   可变数组支持插入,删除,修改的操作

•                                                                   创建

•                                                                                 快捷构造方法【常用】

•                                                                                                创建一个空数组,数组容量为0

•                                                      NSMutableArray *arrayM = [NSMutableArrayarray]

•                                                                                                创建一个容量为10的空数组

•                                                                                                这个容量并不是说数组中只能存放10个元素

•                                                                                                而是一开始就将数组初始化为10个元素,不够用可以动态的增加,这样可以提高效率

•                                                        NSMutableArray *arrayM = [NSMutableArrayarrayWithCapacity:10];

•                                                                                初始化方法【不常用】

•                                               [[NSMutableArrayalloc] init];

•                                                                                注意:可变数组不能使用@[p1,p2]方式创建,这种简便的方式只能用于创建不可变数组

•                                                                  在末尾添加元素

•                                        [arrayM  addObject:p1];

•                                                                  在某个索引插入元素

•                                        [arrayM insertObject:p1atIndex: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 = [NSMutableArrayarray];

•                                                                                                        for (CZPerson*personin arrayM) {

•                                                                                                            if (person.age==0) {

•                                                                                                                [tempaddObject:person];

•                                                                                                            }

•                                                                                                        }

•                                                       [arrayM removeObjectsInArray:temp];

•                                                                  NSArray 转NSMutableArray

•                                                                                  - (void)setArray:(NSArray *)otherArray;

•                                         arrayM.array =@[@1,@2];

0 0