OC字符串(NSString、NSMutableString)
概述:在Object C中存在两个类用于操作字符串,NSString和NSMutableString;NSString在赋值之后不能修改其内容和长度,而NSMutableString可以动态的修改字符串内容和长度。
一、NSString
1、NSString的多种定义方式
1)使用@符号快速创建一个字符串
NSString *str1 = @“jack”;
2)使用对象初始化方法 initWithString
NSString *str2 = [[NSString alloc] initWithString:@“jack”];
3)使用对象格式化方法 initWithFormat
NSString *str3 = [[NSString alloc] initWithFormat:@"age is %d", 10];
4)使用类字符串格式化方法 stringWithFormat
NSString *s3 = [NSString stringWithFormat:@“age is %d”,10];
5)将一个c语言字符串转化成oc字符串
1 char *name = "jack"; //定义一个c语言字符串 2 NSString *s4 = [[NSString alloc] initWithUTF8String:name]; 3 //传入一个c语言字符串变量,也可以直接传入一个c语言字符串 4 //C语言字符串 —> OC字符串 5 const char *cs = [s4 UTF8String]; // OC字符串 —> C语言字符串
6)从一个文件中读取字符串
1 NSString *path = @"/Users/tangge/Desktop/tt.txt"; 2 NSError *error = nil; //用NSError类 定义一个变量保留错误信息 3 NSString *s5 = [[NSString alloc]initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; 4 //使用对象方法initWithContentsOfFile从文件中读取字符串 5 if (error ==nil) { 6 NSLog(@"str = %@",str); 7 } 8 else 9 { 10 NSLog(@"error = %@",[error localizedDescription]); 11 } 12 13 14 NSString *str5 = [NSString stringWithContentsOfFile:path encoding: NSUTF8StringEncoding error:nil]; 15 //使用对象方法stringWithContentsOfFile从文件中读取字符串 16 //从文件读取字符串使用的是绝对路径,不需要对路径进行编码
7)从URL中读取字符串
1 NSString *path = @"file://192.168.13.10/Users/xiaomage/Desktop/课堂共享/day17/note/lnj.txt"; //获取一个文件的路径 2 //NSString *path = @"file:///Users/xiaomage/Desktop/课堂共享/day17/note/lnj.txt"; //如果访问本机文件,可以省略主机地址 file:/// 3 //通过以上两种方式获取的路径中含有中文需要进行编码处理 4 path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 5 6 7 NSURL *url = [NSURL fileURLWithPath:path]; //通过类工厂方法创建一个url 8 //NSURL *url = [NSURL alloc] initWithString:path];//也可以通过对象方法创建url 9 //NSURL *url = [NSURL URLWithString:path]; 也可以通过这种方式创建url 10 //通过fileURLWithPath方法传进来的路径默认已经进行过编码处理,不需要进行编码处理 11 12 NSString *str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; 13 //调用NSString的类方法stringWithContentsOfURL 实现从URL路径中读取字符串
8)将字符串写入文件
- 通过writeToFile方法
1 NSString *str = @"iOS0601基础班"; 2 // atomically 如果传入YES, 字符串写入文件的过程中如果没有写完, 那么不会生成文件 3 // 如果传入NO, 字符串写入文件的过程中如果没有写完, 会生成文件 4 NSString *path2 = @"/Users/xiaomage/Desktop/abc.txt"; 5 BOOL flag = [str writeToFile:path2 atomically:YES encoding:NSUTF8StringEncoding error:nil]; 6 NSLog(@"flag = %i", flag); //写入成功返回YES,写入失败返回NO
- 通过writeToURL方法
1 NSString *str = @"abcdef"; 2 NSURL *url = [NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/123.txt"]; 3 BOOL flag = [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil]; 4 // 注意点: 如果重复写入, 后一次写入的会覆盖前一次写入的内容 5 NSString *str2 = @"我们号"; 6 [str2 writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
2、字符串的基本操作
1)将字符串变为小写
1 NSString *str1 = @"aBc iS bIS Bid "; 2 NSString *s = [str1 lowercaseString]; //调用lowercaseString方法 3 NSLog(@"s = %@",s); //输出结果:s = abc is bis bid
2)将字符串变为小写
NSString *str1 = @"aBc iS bIS Bid "; NSString *s = [str1 uppercaseString]; //调用 uppercaseString NSLog(@"s = %@",s); //输出结果:s = ABC IS BIS BID
3)将字符串首字母变为大写
1 NSString *str1 = @"abc is bis bid"; 2 NSString *s = [str1 capitalizedString]; //调用 capitalizedString 3 NSLog(@"flag = %d",flag); //输出结果:s = Abc Is Bis Bid
4)判断两个字符串的内容是否相同
NSString *str1 = @"abc"; NSString *str2 = @"ABC"; // 比较两个字符串的"内容"是否相同 BOOL flag = [str1 isEqualToString:str2]; NSLog(@"flag = %i", flag); //如果内容相同NSOrderedSame,不同返回NO,相同返回YES
5)比较两个字符串的大小
1 //比较两个字符串大小 2 NSString *str1 = @"abc"; 3 NSString *str2 = @"ABC"; 4 switch ([str1 compare:str2]) { 5 case NSOrderedAscending: 6 NSLog(@"str1 小于 str2"); //NSOrderedAscending 升序前面的小于后面 7 break; 8 case NSOrderedSame: 9 NSLog(@"str1 等于 str2"); //NSOrderedSame 前后两个对象 相等 10 break; 11 default: 12 NSLog(@"str1 大于 str2"); //NSOrderedDescending 降序前面大于后面字符串 13 break; 14 } 15 16 /* 17 //忽略大小写进比较 caseInsensitiveCompare忽略大小写进行比较 18 switch ([str1 caseInsensitiveCompare:str2]) { 19 case NSOrderedAscending: 20 NSLog(@"str1 小于 str2"); 21 break; 22 case NSOrderedDescending: 23 NSLog(@"str1 大于 str2"); 24 break; 25 default: 26 NSLog(@"str1 等于 str2"); 27 break; 28 } 29 30 */
3、字符串的截取
1)判断字符串以什么开头
1 NSString *str = @"http://www.520it.com/img/lnj.gif"; 2 // 判断是否以 ”http://“ 么开头 3 // 本质就是从字符串的第一个字符开始匹配, 只要不匹配就返回NO 4 if ([str hasPrefix:@"http://"]) { 5 NSLog(@"是一个URL"); 6 }else 7 { 8 NSLog(@"不是一个URL"); 9 } 10
2)判断字符串以什么结尾
1 NSString *str = @"http://www.520it.com/img/lnj.gif"; 2 //判断是否以".gif"结尾
3 //本质就是从字符串的最后一个字符开始匹配, 只要不匹配就返回NO
4 if ([str hasSuffix:@".gif"]) {
5 NSLog(@"动态图片");
6 }else{
7 NSLog(@"不是动态图片");
8 }
3)判断字符串中是否包含520it.com
1 NSString *str = @"http://www.520it.com/img/lnj.gif" 2 NSRange range = [str rangeOfString:@"lnj"]; 3 //NSRange是OC中的结构体 ,有location、length两个成员变量 4 // location从0开始 , length从1开始 5 // 只要str中包含该字符串, 那么就会返回该字符串在str中的起始位置以及该字符串的长度 6 //如果str中没有需要查找的字符串, 那么返回的range的length=0, location = NSNotFound 7 if (range.location == NSNotFound) { 8 NSLog(@"str中没有需要查找的字符串"); 9 }else{ 10 NSLog(@"str中有需要查找的字符串"); 11 NSLog(@"location = %lu, length = %lu", range.location, range.length); 12 }
4)动态的截取一个"小码哥"字符串
1 //第一种方式 截取“小码哥”三个字符 2 NSString *str = @"<head>小码哥</head>"; 3 NSRange range = [str rangeOfString:@"小码哥"]; 4 //定义一个结构保存小码哥在字符串中得索引和长度 5 NSString *newstring = [str substringWithRange:range]; 6 NSLog(@"%@",newStr); //输出的结果:小码哥 7 8 //第二种方式 截取> </之间的内容 9 /* 10 NSString *str = @"<head>小码哥</head>"; 11 NSUInteger location = [str rangeOfString:@">"].location +1; 12 //以指定的索引开始,一直往后截取 直到字符串结尾 13 NSString *str1 = [str substringFromIndex: location]; 14 NSInteger location2 = [newStr rangeOfString:@"</"].location ; 15 //从指定的所以开始,一直往前截取 16 NSString *newStr = [str substringToIndex: location2]; 17 NSLog(@"%@",newStr); //输出的结果为:小码哥 18 */
4.字符串的搜索
1)用'/'字符替换 '&'
NSString *str = @"http:&&www.520it.com&img&lnj.gif"; //参数 stringByReplacingOccurrencesOfString 字符串替换 NSString *newStr = [str stringByReplacingOccurrencesOfString:@"&" withString:@"/"]; NSLog(@"%@",newStr);// http://www.520it.com/img/lnj.gif
2)去除字符串中的空格
NSString *str = @" http: &&www. 520it.com &img&lnj.gif "; NSString *newStr = [str stringByReplacingOccurrencesOfString:@" " withString:@""]; NSLog(@"《 %@ 》",newStr); //输出的结果是:http:&&www.520it.com&img&lnj.gif
3)去除字符串中首尾字符
1 NSString *str = @" http:&&www.520it.com&img&lnj.gif "; 2 NSCharacterSet *set = [NSCharacterSet whitespaceCharacterSet]; 3 NSString *newStr = [str stringByTrimmingCharactersInSet:set]; 4 NSLog(@"%@",newStr); //输出的结果:http:&&www.520it.com&img&lnj.gif
4)取出字符串中首尾的大写
1 NSString *str = @"HTTP://www.520it.com/img/LNJ.GIF"; 2 NSCharacterSet *set = [NSCharacterSet uppercaseLetterCharacterSet]; 3 NSString *newStr = [str stringByTrimmingCharactersInSet:set]; 4 NSLog(@"%@",newStr);//输出结果:://www.520it.com/img/LNJ.
5)去除首尾的"***"
NSString *str = @"***http://520it.com/im*g/ljn.gif***"; NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"*"]; NSString *newStr = [str stringByTrimmingCharactersInSet:set]; NSLog(@"newStr =%@", newStr);//输出结果:http://520it.com/im*g/ljn.gif
5.路径字符串处理
1)判断字符串是否是绝对路径
1 NSString *str = @"/Users/tangge/Desktop/赵玉堂.txt"; 2 // 本质就是判断字符串是否以 “/”开头 3 if ([str isAbsolutePath]) { 4 NSLog(@"是绝对路径"); 5 } 6 else 7 { 8 NSLog(@"不是绝对路径"); 9 }
2)获取文件中最后一个目录
1 NSString *str = @"/Users/tangge/Desktop/赵玉堂.txt"; 2 //本质就是获取最后一个/后面的内容 3 NSString *newStr = [str lastPathComponent]; 4 NSLog(@"%@",newStr); //输出的结果:赵玉堂.txt
3)删除路径中得最后一个目录
1 NSString *str = @"/Users/tangge/Desktop/赵玉堂.txt"; 2 //本质就是删除最后一个 / 后面的内容 3 NSString *newStr = [str stringByDeletingLastPathComponent]; 4 NSLog(@"%@",newStr); //输出结果:/Users/tangge/Desktop
4)给文件添加一个目录
1 NSString *str = @"/Users/tangge/Desktop/赵玉堂.txt"; 2 //本质就是在字符串 后面 添加 / 和类容 3 NSString *newStr = [str stringByAppendingPathComponent:@"doc"]; 4 NSLog(@"%@",newStr); 输出结果:/Users/tangge/Desktop/赵玉堂.txt/doc
5)获取文件扩展名
1 NSString *str = @"/Users/tangge/Desktop/赵玉堂.txt"; 2 //获取文件的扩展名,本质就是从字符串末尾开始查找.,截取第一个 . 后面的内容 3 NSString *newStr = [str pathExtension]; 4 NSLog(@"%@",newStr); //输出结果:txt
6)删除文件扩展名
1 NSString *str = @"/Users/tangge/Desktop/赵玉堂.txt"; 2 //删除文件中的扩展名 ,本质就是从字符串末尾开始查找 . , 删除 第一个 .和后面的内容 3 NSString *newStr = [str stringByDeletingPathExtension]; 4 NSLog(@"%@",newStr); //输出的结果:/Users/tangge/Desktop/赵玉堂
7)给文件添加拓展名
1 NSString *str = @"/Users/tangge/Desktop/赵玉堂.txt"; 2 NSString *newStr = [str stringByAppendingPathExtension:@"jpg"]; 3 NSLog(@"%@",newStr); //输出结果:/Users/tangge/Desktop/赵玉堂.txt.jpg
6.将字符串转换成基本数据类型
1)将字符串转换成int数据类型
1 NSString *str1 = @"110"; 2 NSString *str2 = @"5.6"; 3 //将字符串类型转换成 int类型 4 int value = [str1 intValue]; 5 double value1 = [str2 doubleValue]; 6 NSLog(@"%d,%lf",value,value1); //输出结果:110,5.600000
二、NSMutableString
1、创建NSMutableString字符串
1 //类方法创建NSMutableString字符串 2 NSMutableString *str = [NSMutableString string]; //创建一个空得NSMutableString 3 NSMutableString *str = [NSMutableString stringWithString:@“zyt"]; //定义并初始化一个NSMutableString字符串 4 NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10”]; //格式化一个字符串 5 //类方法创建NSString字符串 6 /* 7 NSString *s3 = [NSString stringWithFormat:@“age is %d”,10]; 8 */ 9 //对象方法创建NSMutableString字符串 10 NSMutableString *str = [[NSMutableString alloc]init]; //创建一个空的字符串 11 NSMutableString *str = [[NSMutableString alloc] initWithFormat:@"zyt"]; 12 //对象方法创建NSString字符串 13 /* 14 NSString *str1 = @“jack”; //快速创建一个字符串 15 NSString *str2 = [[NSString alloc] initWithString:@“jack”]; 16 NSString *str3 = [[NSString alloc] initWithFormat:@"age is %d", 10]; 17 */
2.NSMutableString和NSString比较
1 NSMutableString *str = [NSMutableString stringWithFormat:@"www.520it.com"]; 2 //在字符串后面添加上/image,返回自身,不会生成新的字符串 3 [str appendString:@"/image"]; 4 NSLog(@"%@",str); 5 //不可变字符串添加/image ,会生成一个新的字符串 6 NSString *str1 = @"www.baidu.com"; 7 NSString*newStr =[str1 stringByAppendingPathComponent:@"jpg"]; 8 NSLog(@"%@",newStr);
3.NSMutableString简单实用
1)删除字符串中得指定字符
1 NSMutableString *strM = [NSMutableString stringWithFormat:@"www.520it.com.520"]; 2 NSRange range = [strM rangeOfString:@"520"]; 3 [strM deleteCharactersInRange:range]; //默认是删除第一个520 4 NSLog(@"%@",strM); //输出结果:www.it.com.520
2)在字符串指定位置插入一个字符串
1 //在520这个单词前面添加个love单词 2 NSMutableString *strM = [NSMutableString stringWithFormat:@"www.520it.com.520"]; 3 NSRange range = [strM rangeOfString:@"520"]; 4 [strM insertString:@"love" atIndex:range.location]; 5 NSLog(@"%@",strM); //输出结果:www.love520it.com.520
3)将字符串指定的字符串替换
1 NSMutableString *strM = [NSMutableString stringWithFormat:@"www.520it.com.520"]; 2 /* 实用NSString 的stringByReplacingOccurrencesOfString方法 3 NSString *str = [strM stringByReplacingOccurrencesOfString:@"520" withString:@"530"]; 4 NSLog(@"%@",str); //输出结果:www.530it.com.530 5 */ 6 NSUInteger count = [strM replaceOccurrencesOfString:@"520" withString:@"530" options:0 range:NSMakeRange(0, strM.length)]; 7 NSLog(@"strM = %@",strM); //输出结果:strM = www.530it.com.530 8 NSLog(@"count = %lu",count);//输出结果:count = 2
4)指定格式字符串拼接
1 //将3个520it拼接在一起, 中间用空格隔开 520it 520it 520it 2 //第一种方式 3 NSString *str = @"520it"; 4 NSString *newStr = [str stringByAppendingString:@" "]; //只能先顶一个newStr变量 5 for (int i = 0; i < 2; i++) { 6 7 newStr = [newStr stringByAppendingString:@"520it"]; 8 newStr = [newStr stringByAppendingString:@" "]; 9 } 10 newStr = [newStr stringByReplacingCharactersInRange:NSMakeRange(newStr.length-1, 1) withString:@""]; 11 NSLog(@"%@",newStr); 12 13 14 /*第二种方式 15 // NSMutableString *str =[NSMutableString stringWithString:@"520it"]; 16 NSMutableString *str = [NSMutableString string]; 17 for (int i = 0; i < 3; i++) { 18 19 [str appendString:@"520it"]; 20 [str appendString:@" "]; 21 22 } 23 24 [str deleteCharactersInRange:NSMakeRange(str.length-1, 1)]; 25 26 NSLog(@"%@",str); 27 28 */ 29 30 /* 第三种方式 31 NSString *str = @"520it"; 32 NSString *newStr = [str stringByAppendingString:@" "]; 33 newStr = [newStr stringByAppendingString:@"520it"]; 34 newStr = [newStr stringByAppendingString:@" "]; 35 newStr = [newStr stringByAppendingString:@"520it"]; 36 NSLog(@"%@",newStr); 37 */