Foundation框架(NSString、NSMutableString)

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      */

   

  

  

原文地址:https://www.cnblogs.com/zhaoyutang/p/4623376.html