zoukankan      html  css  js  c++  java
  • 黑马程序员--Foundation框架之--NSString类以及它的子类NSMutableString类

     

    ------IOS培训期待与您交流! -------

     

    继续看一下Foundation框架中的常用对象:NSString和NSMutableString

    在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutableString是可变的,和Java中的StringBuilder一样。

    一、NSString对象

    在OC中,NSString对象是非常重要的一个对象,也是最基础的一个对象,是用来处理字符串的常用类。

    下面来看一下NSString的一些方法的使用:

    1、创建的方法

    // 字符串的创建方式  
    NSString *string1 = @"hello";  
    NSLog(@"%@",string1);  
    
    string1 = [[NSString alloc] initWithString:@"hello1"]; NSLog(@"%@",string1);
    //占位符,可以实现拼接字符串 //[string1 stringByAppendingFormat:<#(NSString *), ...#>]这个方法也是可以实现字符串拼接的 string1 = [[NSString alloc] initWithFormat:@"hello %@",string1]; NSLog(@"%@",string1);
    //使用类方法创建字符串 string1 = [NSString stringWithString:@"hello1"];

     

    这里用了四种方式去创建一个字符串,我们常用的方式一般是第一种,第二种是对象方法创建的,第三种是在创建字符串的时候可以实现字符串的拼接

    第四种是使用类的方法创建的

     

    2、比较字符串的值

     

    //比较字符串的值  
    NSString *string2 = @"abcd";  
    NSString *string3 = @"8888";  
    BOOL isEquals
    = [string2 isEqualToString:string3];
    if(isEquals){ }
    else{ }

    这个方法要和==方式判断相等的方式区分,==和isEqual方法一样,比较指针变量是否指向同一个对象的,但是在OC中对于字符串有一个特殊的地方,下面来看一下代码:

     

        NSString *string8 = @"abc";  
        NSString *string9 = @"abc";  
    //string8和string9是局部变量,在栈中分配内存的  
        if(string8 == string9){  
            NSLog(@"string8 == string9");  
        }else{  
            NSLog(@"string8 != string9");  
        }  

    这里我们运行之后,发现用==判断也是相等的。但是在来看一下下面的代码:

     

        //下面的string11和string12还是在栈中分配内存的  
        NSString *string11 = [[NSString alloc] initWithString:@"abc"];  
        NSString *string12 = [[NSString alloc] initWithString:@"abc"];  
        if(string11 == string12){  
            NSLog(@"string11 == string12");  
        }else{  
            NSLog(@"string11 != string12");  
        }  

    我们发现用initWithString初始化方法创建的字符串他们的指针变量也是指向同一个对象的,

    所以这里要记住了,NSString类中的 initWithString方法创建的字符串和NSString *str = @"demo"直接创建的方式是一样的,都是指向常量池中的一个对象。

    所以使用==判断是相等的,其他的NSString类中创建字符串的方法就不一样了,比如下面的代码:

     

        //下面的string13和string14是在堆中分配内存的,所以string13和string14不相等了  
        NSString *string13 = [[NSString alloc] initWithFormat:@"abc%@",@"def"];  
        NSString *string14 = [[NSString alloc] initWithFormat:@"abc%@",@"def"];  
        if(string13 == string14){  
            NSLog(@"string13 == string14");  
        }else{  
            NSLog(@"string13 != string14");  
        }  

    用initWithFormat初始化方法创建出来的对象就不想等了。

    所以要记住一点:initWithString初始化方法和直接创建字符串的效果一样,都是指向常量池中的NSString对象

     

    3、比较两个字符串的大小方法

    //比较两个字符串的大小  
    result = [string15 compare:string16];  
    if(result == NSOrderedAscending){  
        //升序  
    }else if(result == NSOrderedDescending){  
        //降序  
    }  


    4、字符串的长度的方法

     

        // length方法  
        NSString *string17 = @"abc";  
        NSInteger len = [string17 length];  
        NSLog(@"len=%ld",len);  

    5、转化字符串的大小写方法

     

    // 转成大写  
    NSString *string18 = @"aEc";  
    NSString *string19 = [string18 uppercaseString];  
    string19 = [string18 lowercaseString];  
    //首字符大写,其他的变成小写  
    [string18 capitalizedString];

     
    6、数值转化的方法

     

    //数值转化方法  
    NSString *string20 = @"3.14";  
    float value = [string20 floatValue];  
    string20 = @"1";  
    BOOL values = [string20 boolValue]; 

     

    7、字符串的截取方法

     

    //字符串的截取  
    NSString *string21 = @"abcdefg";  
    //从开始位置截取到下标为3的字串(不包括3)  
    NSString *stringnews = [string21 substringToIndex:3];  
    //从哪个index开始截取到尾部(包括3)  
    stringnews = [string21 substringFromIndex:3];  
    //截取1~(3+1)部分的字串  
    NSRange range = {1,3};  
    stringnews = [string21 substringWithRange:range];  


    8、字符串的追加方法

     

    //字符串的追加  
    NSString *string22 = @"Android";  
    NSString *stringnew = [string22 stringByAppendingString:@"IOS"];  
    stringnew = [string22 stringByAppendingFormat:@"%@",@"IOS"];  

    这里需要注意的是,每次追加完一个字符串之后,是返回一个新的字符串,因为NSString是不可变类。


    9、字符串的查找方法

    //字符串的查找  
    NSString *string23 = @"www.iphonetrain.com/ios.html";  
    NSRange rang = [string23 rangeOfString:@"ios"];//返回一个范围  
    if(rang.location == NSNotFound){  
        //没找到  
    }else{  
        //找到了  
    }  

    10、取出字符串中指定的char

    //取出字符串中指定的char  
    NSString *string24 = @"abcdef";  
    unichar c = [string24 characterAtIndex:3];  

    二、NSMutableString对象

    上面介绍了NSString对象的一些常用方法,但是OC中的NSString是不可变的对象,所以这里在介绍一下一个与其对应的可变对象:NSMutableString

    1、创建方法

    NSMutableString类的创建方式和NSString的创建方式差不多

    只是有一点需要注意,NSMutableString不能使用直接方式去创建,因为直接方式创建的字符串都是在常量池中,而常量池中的值都是不可变的

    所以不能创建的,同时initWithString创建出来的字符串也是不在常量池中的

     

    2、在字符串中插入一个字串

     

    //在源字符串中指定的index中插入字符串,不会产生新的对象  
    [string1 insertString:@"可变" atIndex:0]; 


    3、字符串的追加

     

    //追加字符串,不会产生新的对象  
    [string1 appendString:@"可变"];

    这个追加方法和NSString是不一样的,他不会产生一个字符串对象

     

    4、删除字串

     

        //删除字符串中指定范围的字串内容  
        NSMutableString *string2 = [NSMutableString stringWithString:@"hello"];  
        NSRange range = {1,3};  
        [string2 deleteCharactersInRange:range];  


    5、替换字符串

     
    //替换字符串内容  
    NSMutableString *string3 = [NSMutableString stringWithString:@"hello"];  
    NSRange ranges = [string3 rangeOfString:@"ll"];//先查找出需要替换字符串的范围  
    [string3 replaceCharactersInRange:ranges withString:@"ee"]; 

    从上面的这些方法中,我们也可以看到NSMutableString类是可变的,因为只有可变字符串是有增删改查操作的

     

  • 相关阅读:
    家长如何助力孩子适应小学生活
    一年级线上家长会
    gdb常用调试命令
    二叉树-后序遍历
    机器人
    Oracle创建只读账号的详细步骤
    ORACLE RAC日常运维-调整RAC+DG环境redo大小
    Redis 延迟分析
    oracle dataguard 重启步骤
    catalog start with + switch database to copy的妙用
  • 原文地址:https://www.cnblogs.com/waterfox/p/4385782.html
Copyright © 2011-2022 走看看