OC-字符串.数组.字典.集合

一.字符串

1.  查看类的基本信息
    /*
     * 一个类由.h和.m文件组成
     
     * .h: 声明他的属性与方法
     .m: 具体的实现
     
     * OC不开源:只能看到系统类的.h文件,不能看到系统类的.m文件
     
     * 进入类的.h文件能要能找到以下信息
     
     1. 类的父类
     2. 类遵循哪些协议
     3. 类所属框架
     4. 类里面的方法
     */
    
    
    /*
     * 字符串类
     
     * NSString:不可变字符串
     
     对象确定后,不能够修改字符串的内容,也就是说不能对字符串进行增删改查操作
     
     * NSMutableString:可变字符串
     
     对象确定后,能够修改字符串内容,能够对字符串进行增删改查操作
     */

2.  NSString不可变字符串

    创建一个字符创常量

    1.通过直接赋值,创建一个字符串常量

            NSString *str1 = @"字符串1";
    
            //通过初始化方法和便利构造方法创建一个空字符串对象

            NSString *str2 = [[NSString alloc]init];
            NSString *str3 = [NSString string];
    
            //给空字符串对象赋值

            str2 = @"字符串2";
            str3 = @"字符串3";

    2.快速创建一个字符串

            //通过带参数的init方法快速创建字符串
            NSString *string4 = [[NSString alloc]initWithString:@"字符串4"];
    
            //通过带参数的便利构造方法快速创建字符串
            NSString *string5 = [NSString stringWithString:@"字符串5"];
    
    3.创建一个格式化的字符串

            int a = 6;
    
            //通过带参数的便利构造方法创建格式化字符串,后面的格式,跟NSLog括号内的一样
            NSString *string6 = [NSString stringWithFormat:@"字符串%d",a];
            NSLog(@"字符串%d",a);
    
            //通过带参数的init初始化方法创建格式化字符串
            NSString *sting7 = [[NSString alloc]initWithFormat:@"字符串%d",a];

    4.字符串的比较

            NSString *string8 = @"ab";
            NSString *string9 = @"abc";
    
    
            /*
             * NSOrderedDescending: 代表string8>string9
             * NSOrderedSame: 相等
             * NSOrderedAscending:string8<sting9
             */
    
            //区分大小写的比较
            NSComparisonResult resutl = [string8 compare:string9];
    
            //不区分大小写的比较
            NSComparisonResult result1 = [string8 caseInsensitiveCompare:string9];
    
            //isEqualTostring比较字符串对象的内容是否相同,==比较两个字符对象的内存地址是否一样
           BOOL isEqual = [string8 isEqualToString:string9];

    5.字符串的转换


            NSString *string10 = @"aBcDeFg";
    
            //uppercaseString 将字母转化成大写
            NSString *upperTest = [string10 uppercaseString];
    
            //lowercaseString 将字母转化成小写
            NSString *lowerTest = [string10 lowercaseString];
    
            //capitalizedString 将首字母变成大写,后面变成小写
            NSString *capitalTest = [string10 capitalizedString];

    6.字符串的截取与拼接


            NSString *string11 = @"hello iOS";
    
            subtringToIndex表示从头截取到哪里
            NSString *subToString = [string11 substringToIndex:5];
    
            substringFromIndex表示从哪里开始截取到尾
            NSString *subFromString = [string11 substringFromIndex:6];
    
            NSRang规定一个返回,locationd代表从哪里开始截取,length代表截取多长
            NSRange rang = {1,1};
    
            substringWithRange表示按指定的范围截取
            NSString *subRangString = [string11 substringWithRange:rang];
    
            //通过length获取到字符串的长度
            long strLeng = string11.length;
    
    
            NSString *string12 = @"hello";
    
            stringByAppendingString拼接字符串
            NSString *appendString = [string12 stringByAppendingString:@"你好"];
    
            int b = 12;
    
            格式化拼接字符串
            NSString *formatAppendString = [string12 //stringByAppendingFormat:@"你好%d",b];
    
           字符串转数组
           NSString *string13 = @"刘伟改变世界的人,是真的";
    
           componentsSeparatedByString用特定字符分割字符串
           NSArray *arry = [string13 componentsSeparatedByString:@","];
 
3.  NSMutableString  可变字符串 

    1.可变字符串强烈不建议直接赋值

           NSMutableString *string14 = [NSMutableString 
           stringWithString:@"字符串14"];

           NSMutableString *string15 = [[NSMutableString alloc]initWithString:@"字符串15"];

    2.可变字符串的增->使原字符串改变

           //appendString是对自身进行修改,如果方法没有返回值一般都是对自身进行修改
           [string14 appendString:@"修改1"];
    
           //appendFormat对自身进行格式化拼接
           int c = 14;
           [string14 appendFormat:@" %d",c];
    
           //insertString:atIndex 在字符串的指定位置插入内容
           [string14 insertString:@"♦️" atIndex:3];
    
    3.可变字符串的删->删除原字符串的某些内容

            //deleteCharactersInRange删除原字符串中指定区域的字符

            NSRange rang1 = {5,2};

            [string14 deleteCharactersInRange:rang1];
    
    4.可变字符串的改->修改原字符串的内容

            NSRange rang2 = {7,4};
            [string14 replaceCharactersInRange:rang2 withString:@"成功"];
    
    5.可变字符串的查->查找原字符串中是否有指定的字符

           //containsString查找原字符串中是否有指定字符,并没有修改原字符
           BOOL isHeart = [string14 containsString:@"♦️"];

二.数组

1.NSArrary 不可变数组

    1.数组对象的创建

            //Foundation框架中提供了很多的集合类如:NSArray,NSMutableArray但是这些类只能存放OC对象类型的数据
    
            NSArray *array5 = @[@"",@"",@""];   // @"5"等价于@5

            NSArray *array1 = [NSArray arrayWithObject:@"one"];
            NSArray *array2 = [NSArray arrayWithObjects:@"one",@"two",@"three",nil];
            NSArray *array3 = [NSArray arrayWithArray:array1];

            NSLog(@"array1 : %@", array1);
            NSLog(@"array2 : %@", array2);
            NSLog(@"array3 : %@", array3);
    
            NSArray *array4 = [[NSArray alloc]initWithArray:array2];
    
            NSLog(@"array4 : %@",array4);

    2.获取数组中的元素个数以及访问数组元素

            NSArray *array5 = [[NSArray alloc]initWithObjects:@"一只羊",@"两只羊",@"三只羊",nil];
    
            long count = [array5 count];
    
            NSLog(@"array5中元素的个数 = %ld",count);
    
            NSString *string1 = [array5 objectAtIndex:0];
    
            NSString *string2 = array5[2];
    

            NSLog(@"array5中的第一个元素是\n%@",string1);
    
    3.追加数组中的内容


            NSArray *array6 = [NSArray arrayWithObjects:@"盖伦",@"寒冰",nil];
    
            NSArray *array7 = [array6 arrayByAddingObject:@"liulang"];
    
            //数组可以直接输出
            NSLog(@"array7 : %@",array7);
    
    4.数组转字符串

            NSArray *array8 = [NSArray arrayWithObjects:@"I",@"Love",@"You", nil];
    
            NSString *string9 = [array8 componentsJoinedByString:@"❤️"];
    
            NSLog(@"string9 : %@",string9);

    5.判断数组中是否存在一个指定的对象

            NSArray *array9 = [NSArray arrayWithObjects:@"爱美的人",@"爱吃的人",@"爱笑的人",@"爱唱歌的人",nil];
    
            BOOL isContain = [array9 containsObject:@"爱玩游戏的人"];

            NSLog(@"isContain :%d",isContain);

    6.根据指定的对象返回索引下标、返回数组中最后一个元素

            NSArray *array10 = [NSArray arrayWithObjects:@"mac",@"window",nil];
    
            //索引元素位置
            NSInteger index = [array10 indexOfObject:@"mac"];
            NSLog(@"index = %ld",index);
            
            //输出最后一个字符串
            NSString *lastObject = [array10 lastObject];
            NSLog(@"lastObject of lastObject = %@",lastObject);

    7.数组排序

            NSArray *sortArray = @[@"b",@"c",@"d",@"z",@"r"];
    
            //设置比较方法,升序
            NSArray *resultArray = [sortArray sortedArrayUsingSelector:@selector(compare:)];
    
    
            //能设置升序还是降序
            NSArray *resultArray1 = [sortArray sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) 
            {
        
             return [obj1 compare:obj2];
        
             } ];


2. NSMutableArray(可变数组)       

    0.可变数组的赋值

             NSMutableArray *mutableArray1 = [NSMutableArray    arrayWithObjects:@"xiaohong",@"xiaoming",@"xiaohua",@"xiaoqiao",nil];
    
    1.新增

            [mutableArray1 addObject:@"xiaolan"];
    
            NSLog(@"新增后的结果 = %@",mutableArray1);
    
    2.插入

            [mutableArray1 insertObject:@"jiaodaozhuren" atIndex:1];
    
            NSLog(@"插入后的结果 = %@",mutableArray1);
 
    3.删除最后一个元素

            [mutableArray1 removeLastObject];
    
            NSLog(@"移除最后一位元素后的结果 = %@",mutableArray1);
    
    4.删除指定的元素        

            [mutableArray1 removeObject:@"xiaoming"];
    
            NSLog(@"删除指定元素后的结果 = %@",mutableArray1);
    
    5.删除指定位置的元素

            [mutableArray1 removeObjectAtIndex:1];
    
            NSLog(@"删除指定位置的元素后的结果 = %@",mutableArray1);
    
    6.批量删除

            NSArray *deleteArray = [NSArray arrayWithObjects:@"xiaohua", @"xiaoqiao", nil];
    
            [mutableArray1 removeObjectsInArray:deleteArray];
    
            NSLog(@"批量删除后的结果 =: %@", mutableArray1);
    
    6.替换元素

            [mutableArray1 replaceObjectAtIndex:0 withObject:@"It is over"];
    
            NSLog(@"replace: %@", mutableArray1);

    7.遍历数组

            [mutableArray1 addObjectsFromArray:deleteArray];
    
            for (int index = 0; index<3; index++) 
            { 
               NSLog(@"最终数组里第%d个元素是 : %@",index+1,mutableArray1[index]);
            }

    8.数组的遍历

            NSArray *greatPersonArray = @[@"霍金",@"爱因斯坦",@"居里夫人",@"牛顿",@"爱迪生",@""];
    
    
           //for(;;;)遍历数组

           for(int index = 0;index<greatPersonArray.count;index++)
           {            
             NSLog(@"第%d个伟人是%@",index+1,greatPersonArray[index]);
           }
    
          //for...in 快速遍历数组
          
          /*
          
          *  in左边: 放一个数组内容的引用,没有实例化的对象就叫做引用
     
          *  in右边: 放要遍历的数组
     
          *  核心: 从头遍历指定数组,将每次遍历到的值给in左边的对象
     
          *  当数组里面的元素被遍历完以后,for循环自动结束
     
          */
          
          for (NSString *str in greatPersonArray)
           {
             NSLog(@"快速遍历%@",str);
           }

三.字典

1.查看API找方法
    /*
     * 判断指定字符串是否在字符串的头部
     
     * 判断指定字符串是否在字符串的尾部
     
     * 将数字型字符串转化为基本数据类型
     */
    
    NSString *testStr = @"123456789";
    
    BOOL isPreFix = [testStr hasPrefix:@"12"];
    
    BOOL isSuffix = [testStr hasSuffix:@"89"];
    
    int testStrInt = [testStr intValue];

2.创建一个数组,里面存放NSNumber类型的数据,通过for..in遍历该数组

        //通过NSNumber封装基本数据类型

        NSNumber *num1 = [NSNumber numberWithInt:1];
        NSNumber *num2 = [NSNumber numberWithInt:2];
    
        NSArray *numberArray = @[num1,num2,@(3)];
    
        for (NSNumber *num in numberArray) 
        {    
        NSLog(@"%@",num);
        }

3.字典的基本知识

        /*
        * 字典通过key/Value来存取值,数组通过下标值来存取
     
        * 字典是无序的
     
        * key/value 是成对出现的
     
        * 格式:@{key:value,key:value}
     
        * 因为字典是通过key来存取值的,所以效率会比数组稍高
     
        * key和vlue,不一定非得是字符串,也可以是其他对象,但一般都使用字符串
     
        */

4.NSDictiondary不可变字典

    1.字典对象的创建

        //通过直接赋值
        NSDictionary *dict1 = @{@"name":@"花儿",@"age":@"18"};
    
        //alloc init
        NSDictionary *dict2 = [[NSDictionary alloc]init];
    
        //构造方法
        NSDictionary *dict3 = [NSDictionary dictionary];
    
        //初始化的时候给赋值,都用逗号分隔,key在后,值在前,系统会自动判断键值,给的参数要是双数
        NSDictionary *dict4 = [[NSDictionary alloc]initWithObjectsAndKeys:@"18",@"age",@"小薇",@"name", nil];
    
        //利用构造函数创建字典对象时给初始值
        NSDictionary *dict5 = [NSDictionary dictionaryWithObjectsAndKeys:@"1000",@"hurt", nil];
    
        //将一个字典放到另一个字典中
        NSDictionary *dict6 = [[NSDictionary alloc]initWithDictionary:dict5];
    
        //通过读取存放字典数据的文件,来创建字典
        NSDictionary *dict7 = [[NSDictionary alloc]initWithContentsOfFile:nil];
    
        //将url中存放的字典放到创建的字典对象中
        NSDictionary *dict8 = [[NSDictionary alloc]initWithContentsOfURL:nil];
    
    2.获取字典的值

        NSDictionary *dict9 = @{@"where":@"教室",@"what":@"上课",@"how":@"坐着"};
    
        dict9[@"what"];

        [dict9 objectForKey:@"how"];
    
        //通过方法count获取到字典中键值对的个数

        long num = [dict9 count];
    
    3.获取到字典所有的键和所有值

        //allkey获取到字典中所有的键

        NSArray *allkeysArray = [dict9 allKeys];

        //allvalue获取到字典中所有的值

        NSArray *allValueArray = [dict9 allValues];
    
        //通过遍历字典中的键,来遍历字典
        for (NSString *key in allkeysArray) 
        {            
           NSLog(@"%@",dict9[key]);
         }
    
        NSString *temp = allkeysArray[0];
        NSLog(@"%@",dict9[temp]);
    
        temp = allkeysArray[1];
        NSLog(@"%@",dict9[temp]);

        temp = allkeysArray[2];
        NSLog(@"%@",dict9[temp]);
    
    4.枚举器访问

        NSDictionary *dict10 = @{@"age":@"19",@"name":@"小花"};
    
        //keyEnumerator 来获取到字典中所有的键,将所有的键放到一个容器中 objectEnumerator获取到字典中所有的值
    
        NSEnumerator *result = [dict10 objectEnumerator];
    
        //通过for...in遍历这个容器
       for (NSString *key in result)
        {          
           NSLog(@"%@",key);
        }
    
        NSString *temp;
    
        //result 通过nextObject方法依次获取到容器中的结果,一旦nextObject返回的结果为nil,就跳出循环
        while (temp = [result nextObject])
         {          
            NSLog(@"高大上%@",temp);
         }

5.NSMutableDictionary 可变字典->工作中推荐直接使用这个   

    1. 给字典赋值简单方式 和 字典赋值复杂方式
        
        给字典赋值简单方式
        dict11[@"name"] = @"小伟";
        dict11[@"age"] = @"12";
    
        给字典赋值复杂方式
        [dict11 setValue:@"173" forKey:@"height"];

    2.创建指定元素个数的字典
        
        //创建指定元素个数的字典,但如果赋值要超过这个数的话,字典会自动扩充容量
        NSMutableDictionary *dict12 = [NSMutableDictionary dictionaryWithCapacity:1];
    
        dict12[@"key1"] = @"value1";
        dict12[@"key2"] = @"value2";
    
        //setDictionary 重新给该字典赋值
        [dict12 setDictionary:@{@"key3":@"value4"}];

    3.移除字典元素

        //removeAllObjects 全部移除
        [dict12 removeAllObjects];
    
        //通过指定key来移除指定的元素
        [dict12 removeObjectForKey:@"key3"];
    
        //批量移除
        [dict12 removeObjectsForKeys:@[@"key1",@"key2"]];

四.集合

1.集合的基本概念

        /*
      
        *  集合:存放数据的容器
      
        *  与数组的区别:

         1. 集合是无序的
         2. 集合不允许有重复的值
         3. 集合也只能存放对象
      
        */

2.NSSet 不可变集合

    1.集合的赋值和数组的转化

        //init 方法
        NSSet *set1 = [[NSSet alloc]init];
    
        //构造方法
        NSSet *set2 = [NSSet set];
    
        //创建对象并赋初值
        NSSet *set3 = [[NSSet alloc]initWithObjects:@1,@2,@3, nil];
    
        NSArray *array = @[@"齐白石",@"郑板桥",@"达芬奇"];
    
        //将数组转化集合
        NSSet *set4 = [NSSet setWithArray:array];
    
        //将一个元素放到新创建的集合中
        NSSet *set5 = [NSSet setWithObject:@5];
    
    2.通过枚举器访问集合元素

        //数组转化为集合

        NSArray *painterArray = @[@"唐伯虎",@"齐白石",@"梵高"];

        NSSet *paiinterSet = [NSSet setWithArray:painterArray];
    
        NSArray *shiRenArray = @[@"唐伯虎",@"李白",@"杜甫"];

        NSSet *shiRenSet = [NSSet setWithArray:shiRenArray];
    
        //for循环遍历集合
        for (NSString *temp in paiinterSet)
         {            
            NSLog(@"画家=%@",temp);           
         }
    
        //枚举器遍历集合
        NSEnumerator *result = [shiRenSet objectEnumerator];

        id temp;

        while (temp  = [result nextObject])

         {     
            NSLog(@"诗人=%@",temp);
         }
    
    3.判断两个集合是否有交集


        //判断是否有交集

        BOOL isIntersect = [paiinterSet intersectsSet:shiRenSet];
    
        //判断前者是否是后者的子集

        BOOL isSub = [paiinterSet isSubsetOfSet:shiRenSet];

3. NSMutableSet 可变集合

    1.创建指定元素个数的一个集合对象

        NSMutableSet *set4 = [NSMutableSet setWithCapacity:1];
    
    2.给集合添加单个元素

        [set4 addObject:@"朱元璋"];
    
    3.给集合批量添加元素

        [set4 addObjectsFromArray:painterArray];
    
    4.移除集合中的一个元素

        [set4 removeObject:@"朱元璋"];
    
    5.移除集合中的所有元素

        [set4 removeAllObjects];
    
    
        NSMutableSet *set8 = [NSMutableSet setWithObjects:@"1",@"2",@"3", nil];
    
        NSMutableSet *set9 = [NSMutableSet setWithObjects:@"2",@"3",@"4", nil];
    
    6.获取到两个集合的并集最后赋值给set8

        [set8 unionSet:set9];
    
    7.获取到两个集合的交集最后赋值给set8

        [set8 intersectSet:set9];
    
    
    8.从一个集合中减去另一个集合,就是从集合中移除这两个集合的交集,最终赋值给set8


        [set8 minusSet:set9];
    
    9. 给集合重新赋值

        [set8 setSet:set9];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容