美文网首页
OC基础知识之字符串NSString与NSMutableStri

OC基础知识之字符串NSString与NSMutableStri

作者: 湾里有桃树 | 来源:发表于2018-11-03 03:24 被阅读6次
    • NSMutableString是NSString的子类,即NSString有的方法NSMutableString也有。
    • NSMutableString是可变的字符串,NSString是不可变字符串,即NSMutableString可以对字符串进行增删改操作,NSString则不可以。

    NSString不可变字符串的使用:

    1、创建字符串对象

    NSString *str1= [NSString stringWithString:@"hello world1"];  //一般不用这种方法
    NSLog(@"=====str1:%@",str1);
    NSString *str2 = [[NSString alloc] initWithString:@"hello world2"];//一般也不用这种方法
    NSLog(@"=====str2:%@",str2);
    NSString *str3 = @"hello world3"; //常用方法
    NSLog(@"=====str3:%@",str3);
    //如果事先不知道字符串的值,可以先初始化一个空字符串,后面再进行赋值
    NSString *str4 = nil;
    str4 = @"hello world4";
    NSLog(@"=====str4:%@",str4);
    

    2、C类型字符串转化成OC类型字符串,OC类型转化成C类型

    char *s = "hello world";
    //参数一 常量字符串 参数二 编码格式
    NSString *str = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding];
    NSLog(@"=====str1:%@",str1);
    NSString *str1 = @"This is oc";
    const char *p = [str1 UTF8String];
    NSLog(@"=====p:%s",p);
    

    3、字符串转化成基本数据类型

    NSString *str = @"100";
    NSInteger i = str.integerValue; //100
    NSString *str2 = @"100.1";
    NSInteger f = str2.floatValue;//1oo.1
    NSString *str3 = @"1";
    BOOL b = str3.boolValue; //YES
    

    4、字符串格式化

    NSString *str1 = [NSString stringWithFormat:@"%@%d%@,体重%.1fkg",@"张三身高",180,@"cm",60.5];
    //打印结果:======str1张三身高180cm,体重60.5kg
    NSLog(@"======str1:%@",str1);
    
    NSString *name = @"张三";
    NSInteger age = 20;
    NSString *str88 = [NSString stringWithFormat:@"%@的年龄=%d",name,age];
    

    5、字符串长度

    NSString *str = @"hello";
    NSLog(@"=====length:%d 或者 length:%d",str.length,[str length]);
    

    6、比较2个字符串是否相等

    NSString *str1 = @"hello";
    NSString *str2 = @"hello2";
    if ([str1 isEqualToString:str2]) {
         NSLog(@"相等");
     }else{
         NSLog(@"不相等");
     }
    

    7、比较2个字符串的大小

    // 比较结果 NSOrderedSame 相等  NSOrderedAscending 小于 NSOrderedDescending 大于
    NSString *str1 = @"student1";
    NSString *str2 = @"student2";
    NSInteger result = [str1 compare:str2];
    if (result == NSOrderedSame) {
        NSLog(@"等于");
    } else if(result == NSOrderedAscending){
        NSLog(@"小于");
    }else {
        NSLog(@"大于");
    }
    

    8、字符串查找

    //字符串查找,在str1中能否查找到str2和str3字符串
    NSString *str1 = @"NSOrderedSame,NSOrderedAscending,NSOrderedDescending";
    NSString *str2 = @"Same";
    NSString *str3 = @"Same2";
    NSRange range = [str1 rangeOfString:str2];
    NSRange range2 = [str1 rangeOfString:str3];
    //判断条件
    if (range.location == NSNotFound && range.length == 0) {
         NSLog(@"===1:没有找到的判断");
    } else {
         NSLog(@"===1:location is %ld length is %ld",range.location,range.length);
    }
     if (range2.location == NSNotFound && range2.length == 0) {
        NSLog(@"===2:没有找到的判断");
     } else {
        NSLog(@"===2:location is %ld length is %ld",range2.location,range2.length);
     }
    //最终输出
    //===1:location is 9 length is 4
    //===2:没有找到的判断
    

    9、字符串截取

            NSString * str1 = @"张三2010年从北京大学毕业";
            // 从指定的index开始截取到字符串末尾
            NSString * str2 = [str1 substringFromIndex:str1.length-3];
            NSLog(@"str2 is %@",str2);//str2 is 学毕业
            
            //从开始位置一直截取到指定的index位置
            NSString *str3 = [str1 substringToIndex:2];
            NSLog(@"str3 is %@",str3);//str3 is 张三
            
            // 截取第三到第八之间的字符(包含第三和第八),注意oc的下标是从0开始计数
            NSString *str4 = [str1 substringWithRange:NSMakeRange(3, 6)];
            NSLog(@"str4 is %@",str4);//str4 is 010年从北
    

    NSMutableString可变字符串的使用

    NSMutableString是NSString的子类,所以上面NSString的所有方法NSMutableString都可以使用,下面我们着重讲解下可变字符串才拥有的增删改方法

    1、创建可变字符串

            NSMutableString *str = [NSMutableString stringWithString:@"hello"];//静态方法
            NSMutableString *str1 = [[NSMutableString alloc] initWithString:@"hello"];//动态方法
            NSMutableString *str2 = @"hello";//通过这种方法创建的对象是个不可变字符串,使用可变字符串的方法会crash,所以可变字符串一般不使用这种方法创建
    

    2、可变字符串的增删改方法

            NSMutableString *str = [NSMutableString stringWithString:@"hello"];
            //追加 world
            [str appendString:@"world"];
            NSLog(@"str is:%@",str); //str is:helloworld
            //插入 你好
            [str insertString:@"你好" atIndex:5];//str is:hello你好world
            NSLog(@"str is:%@",str);
            //删除 你好
    //        [str deleteCharactersInRange:NSMakeRange(5, 2)]; 或者
            [str deleteCharactersInRange:[str rangeOfString:@"你好"]];
            NSLog(@"str is:%@",str); //str is:helloworld
    

    NSString与NSMutableString的区别

    1、不可变字符串先后操作的内存空间不一样 而可变字符串是一致的

            NSMutableString *str = [NSMutableString stringWithString:@"hello"];
            NSString *str2 = @"hello";
            NSLog(@"before str:%@ %p",str,str); 
            NSLog(@"before str2:%@ %p",str2,str2);
            
            [str appendString:@"world"];
            str2 = @"helloworld";
            NSLog(@"after str:%@ %p",str,str);
            NSLog(@"after str2:%@ %p",str2,str2);
            /*
             输出结果:
            before str:hello 0x103314420
            before str2:hello 0x100005220
            after str:helloworld 0x103314420
            after str2:helloworld 0x1000052a0
           从输出结果可以看出,不可变字符串先后操作的内存空间不一样 而可变字符串是一致的
             */
    
    

    2、深拷贝(mutableCopy)和浅拷贝(copy)的区别

    先看NSString的深浅拷贝

            NSString * string = @"hello world";
            //浅拷贝
            NSString * copyString = [string copy];
            //深拷贝 
            NSMutableString * mutableCopyString = [string mutableCopy];
            NSLog(@"\nstring = %p\ncopyString = %p\nmutableCopyString = %p",string,copyString,mutableCopyString);
                /*
             输出结果:
             string = 0x100005220
             copyString = 0x100005220
             mutableCopyString = 0x10072dcb0
            */
    

    由此看出NSString中
    浅拷贝:未产生新对象
    深拷贝:产生新对象

    再看NSSMutableString的深浅拷贝

          NSMutableString * string = [NSMutableString stringWithString:@"hello world"];
            //浅拷贝
            NSString * copyMString = [string copy];
            //深拷贝
            NSMutableString * mutableCopyMString = [string mutableCopy];
            NSLog(@"\nmString = %p\ncopyMString = %p\nmutableCopyMString = %p",string,copyMString,mutableCopyMString);
            /*
             输出结果:
             mString = 0x102900150
             copyMString = 0x102900180
             mutableCopyMString = 0x1029001a0
            */
    

    由此看出NSSMutableString中
    浅拷贝:产生新对象
    深拷贝:产生新对象

    相关文章

      网友评论

          本文标题:OC基础知识之字符串NSString与NSMutableStri

          本文链接:https://www.haomeiwen.com/subject/fkihxqtx.html