OC语法<4.1>:Foundation框架中的NSString类
2014-11-23 13:47
363 查看
一:NSString类
Foundation框架的简介:1:Foundation框架是苹果公司提供的工具箱,我们现在不考虑框架是怎么实现的,我们现在只需要怎么用
2:Foundation中的所有的类文件都是以NS开头,方便统一使用
字符串的简介:
创建字符串,代码如下:
<pre name="code" class="objc">int main(int argc, const char * argv[]) { @autoreleasepool { //1:创建字符串的方式 NSString *str1 = @"rwy";//这是一个字符串常量,一旦创建就不能改变 NSLog(@"%@",str1); //2:系统给我们提供了一些自定义的构造方法(init....目的就是返回一个NSString对象) NSString *str2 = @"123"; //相当于 NSString *str2 = [NSString alloc]initWithString:"123"; //因为用的太多了编译器就把NSString改成上面这种格式编译了。 NSString *str3 = [NSString stringWithFormat:@"%@%@%@",@"r",@"w",@"y"];//拼接字符串 NSLog(@"str3为:%@",str3); }
二:字符串的获取
本小节知识点:1:创建字符串
2:获取字符串长度
3:根据索引获得单个字符
4:截取字符串
5:获得字符串的索引位置
6:获得一个字符串的索引范围(了解)
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //1:创建字符串 NSString *str = @"renwenyi"; //2:获得长度 //NSUInteger len = [str length]; NSLog(@"str长度为:%zi",str.length); //3:根据索引获得单个字符 NSString *str1 = @"xijinping"; //如果你给的索引值超出了字符串的长度,就会报异常:Range or index out of bounds //如果你给的值是一个负值,那么获得的值就是一个乱码 char c = [str1 characterAtIndex:6];//索引从0开始, NSLog(@"获得的字符为:%c",c); //4:根据索引获得字符串的一个字串(就是截取字符串的一段) NSString *str2 = @"www.baidu.com"; //substringFromIndex:表示从哪一位开始截取,一直到最后 NSString *str3 = [str2 substringFromIndex:3]; NSLog(@"str3 为:%@",str3); //substringToIndex:表示从头开始截取,一直到你指定的这一位 NSString *str4 = [str2 substringToIndex:3]; NSLog(@"str4为:%@",str4); NSLog(@"str2有没有变化呢??%@",str2); //重点:!!substringWithRange:从中间截取一段,下面例子表示从第3位开始共截取4位 NSRange range = {3,4}; NSString *str5 = [str2 substringWithRange:range]; NSLog(@"str5 为:%@",str5); //5:获得字符串的索引位置 NSString *str6 = @"baidu"; NSRange range2 = [str2 rangeOfString:str6]; NSLog(@"range2的location为:%zi,range2的length为:%zi",range2.location,range2.length); //我们也可以这么写,把range2变成字符串类型 NSLog(@"range2 为:%@",NSStringFromRange(range2)); //如果我们找的字符串没有在str2中肯定会报错,所以我们就需要判断一下,用NSNotFound:表示没有找到 if (range2.location == NSNotFound) { NSLog(@"str6 不再str2当中"); } else { NSLog(@"range2 为:%@",NSStringFromRange(range2)); } //6:获得一个字符串的索引范围(了解就行,其实就是一个带参数的rangeOfString); NSRange range3 = [str2 rangeOfString:@"com" options:(NSCaseInsensitiveSearch)]; NSLog(@"range3为:%@",NSStringFromRange(range3)); } return 0; }
三:字符串的判断
本小节知识点:
1:判断字符串是否为空
2:判断字符串是否以指定内容开头
3:判断字符串是否以指定内容结尾
4:判断两个字符串是否相等(重点)
5:compare:方法
#import <Foundation/Foundation.h> #import "NSString+NSStringExpand.h" int main(int argc, const char * argv[]) { @autoreleasepool { //1:判断字符串是否为空 NSString *str = @""; if (str==nil || str.length == 0) { NSLog(@"字符串长度为空"); } //2:判断字符串是否以指定内容开头 NSString *str1 = @"www.baidu.com"; BOOL isPerfix = [str1 hasPrefix:@"www"]; NSLog(@"isPerfix是以www为空吗?%@",isPerfix?@"YES":@"NO");//三木运算符 //3:判断字符串是否指定的内容结尾 //在开发当中经常用在判断文件格式(.txt .avi .rmvb .mkv .doc mp3 mp4 doc ) NSString *str2 = @"renwenyi.txt"; BOOL isSuffix = [str2 hasSuffix:@".txt2"]; NSLog(@"isSuffix是否以.txt结尾呢?%@",isSuffix?@"YES":@"NO"); //4:判断两个字符串是否相等 NSString *s1 = @"123"; NSString *s2 = @"123"; NSString *s3 = s1; NSLog(@"s1的指针地址%p",s1); NSLog(@"s2的指针地址%p",s2); //疑问?为什么s1和s2的指针地址相等呢? //首先字符串的创建非常的消耗性能,系统为了优化这种方式,用了一个字符串池,在我们每次创建字符串的时候,都会把字符串放在池子当中,下一次如果我们创建一个相同对象的时候,它就会首先去池子里面找有没有这个对象,如果有的话,那么它就会直接把你这个对象的地址返回回来给你,并不会重新创建一个对象 if (s1 == s2) { NSLog(@"s1和s2相等"); } if (s1 == s3) { NSLog(@"s1和s3相等"); } //NSString *s4 = [NSString stringWithFormat:@"%@%@%@",@"a",@"b",@"c"]; NSStri 4000 ng *s4 = [NSString stringWithFormat:@"123"]; NSLog(@"s4的指针地址%p",s4); //注意!!使用 == 号,对两个字符串进行比较,实际上是比较两个字符串的指针地址是否相等 NSLog(@"s4 为:%@",s4); if (s1 == s4) { NSLog(@"s1和s4相等"); }else { NSLog(@"s1和s4的地址不相等"); } //如果我们想判断两个字符串的是否相等,就要使用NSString给我们提供的方法isEqualToString //isEqualToString其实是干了两件事: //1:判断两个字符串指针地址是否相等,如果相等直接返回YES //2:如果不相等,会取出字符串中每一个字符进行比较,如果在比较的过程中都是相等返回yes,相反返回no BOOL isEqualTo = [s1 isEqualToString:s4]; NSLog(@"s1和s4的相等吗?%@",isEqualTo?@"YES":@"NO"); /* 回想set方法内存管理机制: //这里判断两个字符串是否相等,一定不能够使用 isEqualToString 方法,因为我们就是要判断两个字符串的地址是否相等 -(void)setName:(NSString *)name { if(_name != name) { [_name release]; _name = [name retain]; } } */ //5:compare 是 isEqualToString 的增强版本 NSString *ss1 = @"abc"; NSString *ss2 = @"bac"; NSComparisonResult result = [ss1 compare:ss2]; NSLog(@"result 为: %li",result); //其实是比较字符串的Ascii值,从第一个开始一个一个比较,就三种情况,< = > 分别对应下面的三种情况 switch (result) { case NSOrderedAscending: NSLog(@"-1,NSOrderedAscending"); break; case NSOrderedSame: NSLog(@"0,NSOrderedSame"); break; case NSOrderedDescending: NSLog(@"1,NSOrderedDescending"); break; default: break; } //我们自己写个方法模拟 isEqualToString的实现 NSString *sss1 = @"abc"; NSString *sss2 = @"abdr"; BOOL isEqua = [sss1 isEqualToStringSelf:sss2]; NSLog(@"sss1和sss2的相等吗?%@",isEqua?@"YES":@"NO"); } return 0; }
四:基本数据类型和字符串的相互转换
本节知识点:
1:基本数据类型转换成字符串
2: 字符串转换成基本数据类型
3:字母的大小写转换
4:首字母大写
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //基本数据类:char,int,float,double //1:int 类型转换成字符串 int a = 10; NSString *s1 = [NSString stringWithFormat:@"%d",a]; NSLog(@"s1 = %@",s1); //2:float 转换成 NSString float b = 2.33; NSString *s2 = [NSString stringWithFormat:@"%.2f",b]; NSLog(@"s2 = %@",s2); //3:double 转换成 NSString double c = 3.33334; NSString *s3 = [NSString stringWithFormat:@"%0.5f",c]; NSLog(@"s3 = %@",s3); //4:char 转换成 NSString char d = 'd'; NSString *s4 = [NSString stringWithFormat:@"%c",d]; NSLog(@"s4 = %@",s4); //5:NSString -> int NSString *s5 = @"123"; int value1 = [s5 intValue]; NSLog(@"value1 = %d",value1); //6:NSString -> float NSString *s6 = @"3.455"; float value2 = [s6 floatValue]; NSLog(@"value2 = %.3f",value2); //7:NSString ->double NSString *s7 = @"3.34556548"; double value3 = [s7 doubleValue]; NSLog(@"value3 = %.8f",value3); //注意!!! //当你把字符串转换成某种基本数据类型的时候,一定要确定你要转换的数据是正确的,eg: NSString *s8 = @"sdf343"; int value4 = [s8 intValue]; NSLog(@"value4 = %d",value4); //8:将字符串中的字母转换成大写 NSString *str1 = @"renwenYI"; NSString *upperstr = [str1 uppercaseString]; NSLog(@"upperstr = %@",upperstr); //9:将字符串中的字母转换成小写 NSString *str2 = @"renwenYI"; NSString *lowerstr = [str1 lowercaseString]; NSLog(@"upperstr = %@ str2 = %@",lowerstr,str2); //10:将首字母大写,注意了,这是一种格式,如果你字符串中有大写有小写,它可不管,最后都给你变为首字母大写其他小写 NSLog(@"str1 = %@",str1); NSString *capstr = [str1 capitalizedString]; NSLog(@"capstr = %@",capstr); } return 0; }五:字符串重组
本节知识点:
1:多个数据拼接成一个字符串
2:字符串末尾添加一个新的字符
3:在指定范围内添加新的字符串
4:使用新的字符串代替原有的字符串
5:在字符串中删除特定的元素
6:在字符串中删除空格
int main(int argc, const char * argv[]) { @autoreleasepool { //1:多个数据拼接成一个字符串 int year = 2014; int month = 1; int day = 15; NSString *date = [NSString stringWithFormat:@"%d-%d-%d",year,month,day]; NSLog(@"date = %@",date); NSString *str = @"北京市"; NSString *datestr = [NSString stringWithFormat:@"时间:%@ 地点 %@",date,str]; NSLog(@"datestr 为:%@",datestr); //2:字符串的末尾追加新的字符串 NSString *s1 = @"www."; NSString *s2 = [s1 stringByAppendingString:@"baidu.com"]; NSLog(@"s2 = %@ s1 变了吗?请看:s1 = %@",s2,s1); //3:在指定的范围内追加字符串 NSString *s3 = @"www.com"; NSRange range = {4,1}; //location(4)代表的是从哪个索引开始插入,length(1)代表可以覆盖几个字符 NSString *s4 = [s3 stringByReplacingCharactersInRange:range withString:@"baidu."]; NSLog(@"s4为:%@",s4); //4:使用新的字符串代替原有的字符串 NSString *ss1 = @"www.xinlang.com"; NSString *ss2 = [ss1 stringByReplacingOccurrencesOfString:@"." withString:@"-"]; NSLog(@"ss2 = %@",ss2); //5:在字符串中删除特定的元素(可用上面的方法)(开发当中长用在过滤某些敏感的字) NSString *str1 = @"www.}}}}}}}baidu.com"; NSString *str2 = [str1 stringByReplacingOccurrencesOfString:@"}" withString:@""]; NSLog(@"str2 = %@",str2); //6:在字符串中删除空格(可用上面的方法) NSString *str3 = @"www. baidu.com"; NSString *str4 = [str3 stringByReplacingOccurrencesOfString:@" " withString:@""]; NSLog(@"str4 = %@",str4); } return 0; }六:字符串写入文件
本节知识点:
1:怎么把一个字符串写到文件当中?
2:指向指针的指针到底怎么用?
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //将字符串写入到文件中 NSString *str = @"今天下大颗粒钻石!!"; NSString *path = @"/Users/renwenyi/Desktop/test1/zuanshi.txt"; NSError *error; /* 第一个参数是路径 第二个参数用YES,多线程 第三个参数是编码格式用 NSUTF8StringEncoding 第四个参数 NSError是用来记录错误信息的 */ BOOL isWriteToFile = [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error]; //思考这里为什么要用两个*????? //原因是因为我们想要两个返回值,见下面的例子解析 if (isWriteToFile) { NSLog(@"写入文件成功"); } else { NSLog(@"error信息:%@",error); } } return 0; }例子解析:
writeToFile解析 -(BOOL)writeToFile2 { BOOL is = YES; //这样可以么?能实现么?不能吧?一个函数怎么会有两个返回值? return error; return is; //所以我们传回了一个&error的一个地址,然后在前面加个 "*" error的错误信息就打印出来了,这也就是上面我们定义的 NSError *error; 这里的error就相当于&error,所以*error 就可以打印出错误信息。 }七:从文件中读取字符串内容
本小节知识点:
怎样把文件中的内容在我们的程序中显示出来
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //1:给出文件路径 //2:写入文件的时候用什么格式,读取的时候就用什么格式(一般都是NSUTF8StringEncoding); NSString *path = @"/Users/renwenyi/Desktop/test1/zuanshi.txt"; NSError *error; NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; if (str !=nil ) { NSLog(@"str = %@",str); } else { NSLog(@"error = %@",error); } } return 0; }
相关文章推荐
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <一>
- OC语法<4.5> Foundation框架中-集合的内存管理和集合之间的相互转换
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <一>
- 黑马程序员--OC之Foundation框架的使用<二>
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <一>
- OC语法<4.3> Foundation框架中的集合类-NSDictionary
- 黑马程序员--Foundation框架之--NSString类以及它的子类NSMutableString类
- 黑马程序员------Foundation框架------NSString类的操作
- OC语法<4.4> Foundation框架中的集合类-NSSet
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <三> NSArray
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <三> NSArray
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <三> NSArray
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <五> NSDicionary + NSMutableDictionary
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <五> NSDicionary + NSMutableDictionary
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <四> NSMutableArray
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <四> NSMutableArray
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <四> NSMutableArray
- Foundation框架 - NSString类 、NSMutableString类
- 《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <二> NSMutableString
- coreFoundation框架转换为foundation -->桥接