黑马程序员--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、比较字符串的值
这个方法要和==方式判断相等的方式区分,==和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类是可变的,因为只有可变字符串是有增删改查操作的