OC学习日记-06 封装、拆包与字符串

字符串

这里写图片描述

前言

字符串其实就是我们最常用的的NSString,但是它通过oc中为字符串设定的很多方法,使它成为一个应用范围很广的基本数据类型,我们可以用今天的知识做出简单的语言屏蔽系统,文字输入密码检测系统等小程序。而首先,我们要知道字符串是一个实例对象,也就是引用类型,例如NSString *str=[NSString new];中,其实str本质就是一个指针。所以我们首先要学习如何将OC和C中的基本数据类型转换成对象,才可以更加方便我们学习字符串。

封装|拆包

OC中的封装、拆包基本数据类型

NSValue / NSNumber

功能:

将OC和C中的基本数据类型转换成实例对象,即值类型 转换 引用类型

C和OC中 常用的数据类型

     int a=5;
        float b=5.0;
        double c=5.5;
        char d='a';
        bool flag=YES;
     // CGPoint point={3, 4)};
     // CGSize size={5,6};
     // CGRect rect={3, 4, 5, 6};
     // NSRange range={10,3};
        CGPoint point=CGPointMake(3, 4);
        CGSize size=CGSizeMake(5, 6);
        CGRect rect=CGRectMake(3, 4, 5, 6);
        NSRange range=NSMakeRange(10, 3);
        NSEdgeInsets edgeInsets=NSEdgeInsetsMake(10, 10, 10, 10);

封装

NSValue / NSNumber
NSNumber:NSValue
其中NSValue 可以将CGPoint、CGSize、CGRect、NSRange、NSEdgeInsets转换成对象:

NSValue *pointVa=[NSValue valueWithPoint:point];
NSValue *sizeVa=[NSValue valueWithSize:size];
NSValue *rectVa=[NSValue valueWithRect:rect];
NSValue *rangeVa=[NSValue valueWithRange:range];
NSValue *edgeVa=[NSValue valueWithEdgeInsets:edgeInsets];

其中NSNumber 可以将int、float、double、char、bool等基本数据类型转换成对象:

    NSNumber *intNum=[NSNumber numberWithInt:a];
        NSNumber *floatNum=[NSNumber numberWithFloat:b];
        NSNumber *doubleNum=[NSNumber numberWithDouble:c];
        NSNumber *charNum=[NSNumber numberWithChar:d];
        NSNumber *boolNum=[NSNumber numberWithBool:flag];

拆包

        int a1=[intNum intValue];
        float b1=[floatNum floatValue];
        double c1=[doubleNum doubleValue];
        char d1=[charNum charValue];
        bool flag1=[boolNum boolValue];
        CGPoint point1=[pointVa pointValue];
        CGSize size1=[sizeVa sizeValue];
        CGRect rect1=[rectVa rectValue];
        NSRange range1=[rangeVa rangeValue];
        NSEdgeInsets edgeInsets1=[edgeVa edgeInsetsValue];

不可变字符串

字符串分为 :不可变字符串和 可变字符串,其中区别就是,可变字符串的空间是可以改变的,而不可变字符串已被设定了,其空间就是不可改变的了,就算后面一些所谓增加拼接赋值操作,也就是改变该不可变字符串的指针而已。
不可变字符串 NSString
可变字符串 NSMutableString
*/

初始化一个字符串对象

    NSString *string1=@"ibokanwisdom";
        NSString *string2=[NSString stringWithFormat:@"Jack"];
    //    NSString *string3=[NSString stringWithFormat:@"%@%@",@"Jack",@"Rick"];
     //   NSLog(@"%@",string2);
     //   NSLog(@"%@",string3);

       // NSString *string3=[[NSString alloc]initWithFormat:<#(nonnull NSString *), ...#> ];
       //NSString *string3=[[NSString alloc]initWithString:@"ibokanwisdom" ];

使用NSString的类方法来创建字符串 +

    NSString *string4=[NSString stringWithFormat:@"%@,%d,%f,hi guy",@"Rick",5,5.5];
   //     NSLog(@"%@",string4);
       //(lldb)通过断点里面的po 输出的类型 指令打印出来
        NSString *string5=@"Rick";
        NSString *string6=@"666";
        NSString *string7=[NSString stringWithFormat:@"%@%@",string5,string6];
        NSLog(@"%@",string7);

从本地文件读取字符串

  NSString *path1=@"/Users/macpro/Desktop/oc/OC-006-02/OC-006-02/hello.html";
        NSError *error;
        NSString *string8=[NSString  stringWithContentsOfFile:path1 encoding:NSUTF8StringEncoding error:&error];
    NSLog(@"string8 =%@,error=%@",string8,error);    

从网络读取字符串

 NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];
       error=nil;
        NSString *string9=[NSString stringWithContentsOfURL:url encoding:4 error:&error];
        NSLog(@"%@",string9);

字符串的操作

       NSString *string10=@"你是逗比么,我都受不了你了";
        NSUInteger length=[string10 length];
      //  NSLog(@"%lu",(unsigned long)length);
        NSLog(@"%ld",length);
    //字符串的截取
        NSString *subString1=[string10 substringToIndex:5];
        //获取字符串开头到字符串的to的位置的字符串内容,不包括to位置的字符串
        NSLog(@"subString1=%@",subString1);
        NSString *subString2=[string10 substringFromIndex:6];
        //获取字符串从from的位置到结尾的字符串,包括from的位置
        NSLog(@"%@",subString2);
        NSString *subString3=[string10 substringWithRange:NSMakeRange(2, 2)];
        NSLog(@"%@",subString3);
        NSString *string11=@"abcdefg";
        char c=[string11 characterAtIndex:0];//根据字符串的位置index来获得一个字符,注意字符串的索引从 0 开始。
        NSLog(@"%c",c);

字符串的比较,如何判断两个字符串是否相等

     if(subString2 ==subString3){
            //内容和指针都相等的时候,才成立
            NSLog(@"subString2和subString3相等");

        }else{
        NSLog(@"subString2和subString3不相等");
        }

浅拷贝和深拷贝

如何让两个字符串 指针 和 内容 都相同?
深拷贝和浅拷贝的区别
浅拷贝:对象和拷贝的内容共用一份实体,仅仅是引用的变量名称不一样。
深拷贝:原对象和拷贝的对象相互独立,其中任何一个对象的改动都不会对另一个对象造成影响

        NSString *subString4=[NSString stringWithString:subString2];
          //NSString *subString4=[NSString stringWithFormat:subString2]; 指针不一样
        if(subString2 ==subString4){
            //内容和指针都相等的时候,才成立
            NSLog(@"subString2和subString4相等");

        }else{
            NSLog(@"subString2和subString4不相等");
        }
        //在实际开发过程中,我们通常通过只需要比较两个字符串的内容是否想等
        if ([subString2 isEqualToString:subString4]) {
             NSLog(@"subString2和subString4相等");
        }else{
            NSLog(@"subString2和subString4不相等");
        }

比较两个字符串的大小

     NSString *cmpString1=@"hehehehe";
     NSString *cmpString2=@"hahaha";
     NSComparisonResult result=[cmpString1compare:cmpString2];
        switch (result) {
            case NSOrderedAscending:{
                NSLog(@"cmpString1   <  cmpString2,升序");
                break;
            }
            case NSOrderedSame:{
                NSLog(@"cmpString1   =  cmpString2");
                break;
            }
            case NSOrderedDescending:{
                NSLog(@"cmpString1   >  cmpString2,降序");
                break;
            }
            default:
                break;
        }

根据字符串拿到对应的range

   NSRange range=[string10 rangeOfString:@"逗比"];
   NSLog(@"%@",[NSValue valueWithRange:range]); 

指数出第一个遇到该字符串的位置及该字符串

   NSRange range1=[string10 rangeOfString:@""];
   NSLog(@"%ld,%ld",range1.location,range1.length);

判断字符串中是否有 xx 前缀或 xx后缀

     NSString *string12=@"http://www.baidu.com";
        if([string12 hasPrefix:@"http://"]){
            NSLog(@"含有此前缀");
        }else{
            NSLog(@"不含有此前缀");

判断是否为 .jpg 和 .png后缀

       NSString *string13=@"xxxxx.jpg";
        if ([string13 hasSuffix:@".jpg"] || [string13 hasSuffix:@".png"]) {
            NSLog(@"含有此前缀");
        }else{
            NSLog(@"不含有此后缀");
        }

字符串的拼接

   NSString *string14=@"www.baidu.com";
   NSString *string15=[@"http://"stringByAppendingString:string14];
        NSLog(@"%@",string15);
        //http://static.bigstockphoto.com/images/homepage/2016_popular_photo_categories.jpg
        NSString *string16 =@"http://static.bigstockphoto.com";
        NSString *string17 =@"images/homepage/2016_popular_photo_categories.jpg";

        NSString *string18=[string16 stringByAppendingFormat:@"/%@",string17];//连接两个字符串, 并且第二个字符串是按一定格式传进来的
        NSString *string19=[string16 stringByAppendingPathComponent:string17];//文件夹路径的拼接
        NSString *imagePath=@"http://static.bigstockphoto.com/images/homepage/2016_popular_photo_categories.jpg";
        imagePath = [imagePath lastPathComponent];//取出最后一个反斜杠的内容
        NSString *theImageName=@"Rick";
        theImageName = [theImageName stringByAppendingPathExtension:@"png"];

字符串的其他常用工作

1.字符串的转换函数
        NSString *str=@"111addd33";
        int a1=[str intValue];
        NSLog(@"%d",a1);
2.字符串的大小写转换
    NSString *str2= @"aAabb";
        NSString *str3= [str2 uppercaseString];//将字符全部改成大写
        NSString *str4=[str3 lowercaseString];//将自负全部改成小写
        NSString *str5=[str4 capitalizedString];//将首个字符改成大写,其余的都小写      
        NSString *str6=[str2 stringByReplacingOccurrencesOfString:@"bb" withString:@"dd"];
        NSString *str7
        =[str2 stringByReplacingCharactersInRange:NSMakeRange(1,2) withString:@"GG"];
        NSString *str8=@"aa-bb-cc-dd-ee";
        NSArray *array=[str8 componentsSeparatedByString:@"-"];//以separator为分隔符,将原字符串的内容进行分割,分割得到的结果放到一个数组里面,作为返回值;

可变字符串

变字符串的父类是不可变字符串,所以不可变字符串的方法对于可变字符串也是适用的:

NSMutableString *mString=[NSMutableString stringWithString:@"nihao"];
NSMutableString *mString1=[NSMutableString stringWithFormat:@"%@",mString];
NSMutableString *mString2=[NSMutableString stringWithContentsOfFile:@"" encoding:4 error:nil];
NSMutableString *mString3= [NSMutableString stringWithContentsOfURL:[NSURL URLWithString:@""] encoding:NSUTF8StringEncoding error:nil];

可变字符串独特的初始化方法

可变字符串独特的初始化方法,初始化一个空间为100的可变字符串
NSMutableString *mString4= [[NSMutableString alloc]initWithCapacity:100];

将c语言的字符串转换成OC的字符串

  [[NSString alloc]initWithCharacters:<#(nonnull const unichar *)#> length:<#(NSUInteger)#>]

可变字符串还可以进行增删改操作,我们可以用一下例子说明一下简单的语言屏蔽:

        NSMutableString *targetString =[NSMutableString  stringWithString:@"呵呵,我靠"];
        NSRange range=[targetString rangeOfString:@"靠"];
  //      NSLog(@"%@",[NSValue valueWithRange:range]);

替代

  [targetString replaceCharactersInRange:range withString:@"*"];     

     //指数出第一个遇到该字符串的位置及该字符串的长度
        //在指定位置去一个字符串
       [targetString insertString:@"ee" atIndex:3];
        //在字符串末尾添加一个末尾
        [targetString appendString:@"aaa"];
        //在字符串的末尾添加多个字符串
        [targetString appendFormat:@"%@",@"cc",@"dd"];

[targetString deleteCharactersInRange:NSMakeRange(3,2)];

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值