Objective-C里核心的处理字符串的类就是NSString和NSMutableString这两个类,这两个类完成了Objective-C中字符串大部分功能的处理。这两个类的最主要的区别是NSString创建赋值后不能动态修改长度和内容,除非给重新赋值。而NSMutableString类似与链表的,在创建赋值后可以进行修改长度,插入,删除等操作。
一.NSString
//NSString char char *s = "holle Objective-C";//C语言 NSString *str = @"hello C"; //OC //转换 NSString *str1 = [NSString stringWithUTF8String:s];//UTF8编码格式C—>OC NSLog(@"str1 = %@",str1); const char *s1 = [str UTF8String];//反编码 OC->C NSLog(@"s1 = %s",s1);
1.创建NSString字符串
NSString *str2 = @"holle world";//初始化1,自动管理释放内存 NSString *str3 = [[NSString alloc]init];//初始化2,手动释放内存 NSString *str4 = [NSString stringWithFormat:@"a=%@",str];//初始化3,格式化字符串 NSString *str4_1 = [NSString stringWithUTF8String:"字符串转换utf-8格式"]; //字符串转换为utf-8格式 参数为char*类型
2.字符串拼接
NSString *str5 = [str stringByAppendingString:str1]; NSLog(@"str5 = %@",str5); NSString *str5_1 = [str stringByAppendingFormat:@"str%@",str1]; NSLog(@"str5_1 = %@",str5_1);
3.大小写转换
NSString *str6 = @"aBcDFe"; NSString *str7 = [str6 lowercaseString];//都转为大写 NSString *str8 = [str6 uppercaseString];//都转为小写 NSString *str8_1 = [str6 capitalizedString];//首字母大写 NSLog(@"str7 = %@",str7); NSLog(@"str8 = %@",str8); NSLog(@"str8_1 = %@",str8_1);
4.字符串判断
//(1)前后缀判断 NSString *str9 = @"www.dooo.com"; BOOL hasPrefix = [str9 hasPrefix:@"www"];//判断前缀 BOOL hasSuffix = [str9 hasSuffix:@"com"];//判断后缀 //(2)判断两字符串是否相同 BOOL doSame = [str7 isEqualToString:str8]; //(3)判断字符串为空 //需判断 string == nil 和 string0.length == 0 同时成立。 if (str9 == nil && str9.length == 0) { NSLog(@"字符串nil"); } else{ NSLog(@"不为空"); }; //(4)compare方法(comparer返回的三种值) 判断两者内容是否相同 //1>NSOrderedSame 判断两者内容是否相同 //2>NSOrderedAscending 判断两对象值的大小(按字母顺序进行比较,tring02大于tring01为真) //3>NSOrderedDescending 判断两对象值的大小(按字母顺序进行比较,string02小于string01为真) NSString *string01 = @"This is a String!"; NSString *string02 = @"This is a String!"; BOOL result = ([string01 compare:string02] == NSOrderedSame); NSLog(@"result:%d",result);
5.分割字符串
//(1)按指定字符分割(返回数组) NSString *str10 = @"a,bc,def,g,hijklmn"; NSArray *strArray = [str10 componentsSeparatedByString:@","]; for (NSString *str in strArray) { NSLog(@"str = %@",str); } //(2)按照范围截取字符串 NSRange range = NSMakeRange(0, 5);//0为起始点 5为长度 NSString *str11 = [str10 substringWithRange:range]; NSLog(@"str11 = %@",str11); //(3)从某一处开始截取后面的字符串 NSString *str12 = [str10 substringFromIndex:2];//从索引为2截取后面的 NSLog(@"str12 = %@",str12); //(4)从开始截取到某一位 NSString *str13 = [str10 substringToIndex:7];//从开始截取到索引为7的 NSLog(@"str13 = %@",str13); //(6)拆分为每一个元素字符 遍历 for (int i = 0; i < str10.length; i++) { NSLog(@"%c",[str10 characterAtIndex:i]); }
6.查找搜索
NSString *str14 = @"ad cd ef gh ij ad"; //查找指定字符串的位置(正向查找,只显示第一个位置) NSRange range1 = [str14 rangeOfString:@"ab"]; NSLog(@"起始索引点%ld,长度%ld",range1.location,range1.length); //前面有汉字时,后面可能不提示 //根据索引替换 NSString *str15 = @"hello IOS,holle world"; NSString *str16 = [str15 stringByReplacingCharactersInRange:NSMakeRange(6, 1) withString:@"i"]; NSLog(@"str16 = %@",str16); //根据指定字符串替换原字符串的子串 NSString *str17 = [str15 stringByReplacingOccurrencesOfString:@"IOS" withString:@"iOS"]; NSLog(@"str17 = %@",str17);
7.数据转换
NSString *valueStr = @"123"; //(1)字符串转布尔 BOOL boolValue = [valueStr boolValue]; NSLog(@"bool = %d",boolValue); //(2)字符串转整形 int intValue = [valueStr intValue]; NSInteger integer = [valueStr integerValue]; NSLog(@"int = %d",intValue); NSLog(@"integer = %d",intValue); //(3)转单双精度 float floatValue = [valueStr floatValue]; double doubleValue = [valueStr doubleValue]; NSLog(@"float = %f",floatValue); NSLog(@"double = %f",doubleValue); //(4)其他数据转str NSString *srtingOfValue = [NSString stringWithFormat:@" %d %d %ld %f %f",boolValue,intValue,integer,floatValue,doubleValue]; NSLog(@"string = %@",srtingOfValue);
8.文件字符串操作(读写)
//(1)从文件读取字符串:initWithContentsOfFile方法 NSString *path = @"/Users/Jack/Desktop/jack.text"; NSString *jackString =[[NSString alloc]initWithContentsOfFile:path]; NSLog(@"jackString = %@",jackString); //(2)写字符串到文件:writeToFile方法 NSString *strPath = @" 筑梦小丑--每个人都是小丑,我们在调侃着这个世界。每天取悦着别人,却还不一定能够得到别人的尊重和理解。但,你很重要, 因为你就是你能拥有的全部。你存在, 整个世界才存在。你看得到阳光, 整个世界才看得到阳光.你失去平衡, 世界就失去平衡.你消失, 世界就消失。所以你很重要, 你就是你能拥有的全部"; //文件不存在会自动创建,文件夹不存在则不会自动创建会报错 NSString *path1 = @"/Users/Jack/Desktop/jack.text"; NSError *error; [strPath writeToFile:path1 atomically:YES encoding:NSUTF8StringEncoding error:&error]; if (error) { NSLog(@"导出失败:%@",error); }else{ NSLog(@"导出成功"); }
二.NSMutableString
//NSSMutableString:可变字符串是字符串的子类 //实例化的另一种方法 写一个分配字符串的大小,不可以超过这个范围 NSMutableString *str1 = [[NSMutableString alloc]initWithCapacity:10]; [str1 setString:@"hello"]; NSLog(@"str1 = %@",str1); //增加字符串 [str1 appendString:@"-"]; [str1 appendFormat:@"%@",@"world"]; NSLog(@"str1 = %@",str1); //替换字符串 //替换字符串 NSRange range = [str1 rangeOfString:@"world"];//查找wrold [str1 replaceCharactersInRange:range withString:@"world iOS"];//替换 NSLog(@"str1 = %@",str1); //插入字符串 [str1 insertString:@"java-" atIndex:12];//插入第6位 NSLog(@"str1 = %@",str1); //删除字符串 NSRange range1=[str1 rangeOfString:@"java-"]; [str1 deleteCharactersInRange:range1]; NSLog(@"str1 = %@",str1); //字符串拷贝 NSMutableString *str2 = [NSMutableString stringWithString:@"字符串1"]; NSMutableString *str3; str3 = str2; //赋值 [str3 appendString: @" 和字符串2"]; NSLog(@"str2 = %@",str2); NSLog(@"str3 = %@",str3); //为什么给str3添加数据后 str2的数据也改变了? //这就是指针的魅力所在,因为我们操作的是指针,str2 = str1 意思是两个指针同时指向一块内存,那么str3指向的内存内容改变以后str2当然跟着改变了。
NSString 常用方法总结
+(id)stringWithContentsOfFile:path encoding:enc err | 创建一个新字符串并将其设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误 |
+(id)stringWithContentsOfURL:url encoding:enc err | 创建一个新字符串并将其设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误 |
+(id)string | 创建一个新的空字符串 |
+(id)stringWithString:nsstring | 创建一个新字符串,将其内容设置为 nsstring 内容 |
-(id)initWithString:nsstring | 将字符串内容设置为 nsstring 内容 |
-(id)initWithContentsOfFile:path encoding:enc error:err | 将字符串设置为 path 指定文件的内容,使用字符编码 enc,在err 上返回错误 |
-(id)initWithContentsOfURL:url encoding:enc error:err | 将字符串设置为 url 所指向的内容,使用字符编码 enc,在err 上返回错误 |
-(UNSigned int)length | 返回字符串中字符数目 |
-(unichar)characterAtindex:i | 返回索引i 所在UniCode 字符 |
-(NSString*)substringFromIndex:i | 返回从索引 i 开始到结尾的子字符串 |
-(NSString*)substringWithRange:range | 根据指定范围返回子字符串 |
-(NSString*)substringToIndex:i | 返回从字符串开始到 索引 i 的子字符串 |
-(NSComparator*)caseInsensitiveCompare:nsstring | 比较两个字符串大小,忽略大小写 |
-(NSComparator*)compare:nsstring | 比较两个字符串大小 |
-(BOOL)hasPrefix:nsstring | 测试字符串是否以 nsstring 开始 |
-(BOOL)hasSuffix:nsstring | 测试字符串是否以 nsstring 结尾 |
-(BOOL)isEqualToString:nsstring | 测试两个字符串是否相等 |
-(NSString*)capitalizedString | 返回字符串,串中的每个单词的首字母大写,其余字母小写 |
-(NSString*)lowercaseString | 返回转换为小写的字符串 |
-(NSString*)uppercaseString | 返回转换为大写的字符串 |
-(const char*)UTF8String | 返回UTF8编码格式的字符串 |
-(double)doubleValue | 返回转换为double 类型的字符串 |
-(float)floatValue | 返回转换为 float 类型的字符串 |
-(NSInteger)integerValue | 返回转换为 NSInteger 类型的新字符串 |
-(int)intvalue | 返回转换为 int 的字符串 |
NSMutableString 可修改字符串常用方法
+(id)stringWithCapacity:size | 创建一个字符串,容量为size大小 |
-(id)initWithCapacity:size | 初始化一个字符串,容量为size |
-(void)setString:nsstring | 将字符串设置为 nsstring |
-(void)appendString:nsstring | 在字符串末尾追加字符串 nsstring |
-(void)deleteCharatersInRange:range | 删除指定range 中的字符 |
-(void)insertString:nsstring atIndex:i | 以索引 i 为起始位置插入 nsstring |
-(void)replaceCharatersInRange;range withString:nsstring | 使用 nsstring 替换 range 指定的字符 |
-(void)replaceOccurrencesOfString:nsstring withString:nsstring2 options:opts range:range | 根据选项 opts ,使用指定 range 中的nsstring2 替换所有的 nsstring |
附:本文Demo
http://download.csdn.net/detail/jackjia2015/9408544