黑马程序员--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类是可变的,因为只有可变字符串是有增删改查操作的

 

posted on 2015-04-02 01:02  waterfoxjie  阅读(172)  评论(0编辑  收藏  举报