Foundaton基础
framework框架
1.Foundation框架的类结构关系
1 int main(int argc, const char * argv[]) { 2 @autoreleasepool { 3 //C语言字符串 4 char *ch = "Hello objective-c"; 5 NSString *ns = @"Hello c"; 6 //OC、C语言之间的转换 7 //C语言->OC语言 8 NSString *oc = [NSString stringWithUTF8String:ch]; 9 NSLog(@"转为oc语言的字符串:%@",oc); 10 //OC语言->C语言 11 const char *c = [ns UTF8String]; 12 NSLog(@"转为c语言的字符串:%s",c); 13 } 14 return 0; 15 }
1 int main(int argc, const char * argv[]) { 2 @autoreleasepool { 3 //创建字符串 4 NSString *str1 = @"Hello world1!"; 5 NSString *str2 = [[NSString alloc] init]; 6 str2 = @"Hello world2"; 7 //格式化字符串 8 int a = 10; 9 int b = 20; 10 NSLog(@"%@",[NSString stringWithFormat:@"a=%d, b=%d",a,b]); 11 //拼接字符串 12 NSString *str3 = [str1 stringByAppendingString:str2]; 13 NSLog(@"%@",str3); 14 //大小写转换 15 NSString *str4 = @"ABCDEF"; 16 NSString *str5 = [str4 lowercaseString]; 17 NSLog(@"%@",str5); 18 NSString *str6 = [str5 uppercaseString]; 19 NSLog(@"%@",str6); 20 //前缀后缀的判断 21 NSString *str7 = @"www.goodboy.heyang"; 22 BOOL hasPreFix = [str7 hasPrefix:@"www"]; 23 if (hasPreFix) { 24 NSLog(@"str7有 www 的前缀。"); 25 } 26 BOOL hasSufFix = [str7 hasSuffix:@"heyang"]; 27 if (hasSufFix) { 28 NSLog(@"str7有 heyang 后缀。"); 29 } 30 } 31 return 0; 32 }
1 int main(int argc, const char * argv[]) { 2 @autoreleasepool { 3 //判断两个字符串是否相同 4 NSString *str1 = @"Hello"; 5 NSString *str2 = @"Hello"; 6 if ([str1 isEqualToString:str2]) { 7 NSLog(@"两个字符是一致的。"); 8 }else{ 9 NSLog(@"不一致!"); 10 } 11 12 //比较字符串 13 //NSComparisonResult需要自己去查阅相关的资料 14 15 //分割,按照指定字符分割字符串 16 NSString *str3 = @"a,b,c,d,e,f,g"; 17 NSArray *strArray = [str3 componentsSeparatedByString:@","]; 18 for(NSString *str in strArray){ 19 NSLog(@"str = %@",str); 20 } 21 /*验证正则表达式失败 22 NSString *str4 = @"1+2-3/9"; 23 NSArray *strArray2 = [str4 componentsSeparatedByString:@"[\+\-\*\/]"]; 24 for(NSString *str in strArray2){ 25 NSLog(@"str = %@",str); 26 } 27 */ 28 //按照范围截取字符串,注意这里是结构体实例,所以不需要指针 29 NSRange range = NSMakeRange(1, 5);//前面是截取的起点,后面是长度,于是截取的是1~4 30 NSString *str5 = [str3 substringWithRange:range]; 31 NSLog(@"str5 = %@",str5); 32 //从某一位开始截取后面的字符串 33 NSString *str6 = [str3 substringFromIndex:2]; 34 NSLog(@"str6 = %@",str6); 35 //从开始截取到某一位 36 NSString *str7 = [str3 substringToIndex:2]; 37 NSLog(@"str7 = %@",str7); 38 39 //将字符串拆分为每一个字符 40 for (int i = 0; i<[str3 length]; i++) { 41 NSLog(@"%c ",[str3 characterAtIndex:i]); 42 } 43 } 44 return 0; 45 }
这是NSRange的源码,NSRange不是一个类,而是一个结构体,所以创建一个结构体就不能用指针,然后注意创建这个NSRange方法就是调用NSMakeRange( int , int )方法。
1 int main(int argc, const char * argv[]) { 2 @autoreleasepool { 3 //查找 4 NSString *str1 = @"ab cd ef gh ij ab"; 5 //查找指定字符串的位置 6 NSRange range1 = [str1 rangeOfString:@"ab"]; 7 NSLog(@"%ld 和 %ld",range1.location,range1.length); 8 9 //替换 10 NSString *str2 = @"Hello ios,Hello heyang"; 11 //替换某一个范围的内容 12 NSString *str3 = [str2 stringByReplacingCharactersInRange:NSMakeRange(6, 3) withString:@"android"]; 13 NSLog(@"%@",str3); 14 //指定字符串替换源字符串中的字串,前面一个参数是要被替换的内容,后一个参数是替换后的内容 15 NSString *str4 = [str2 stringByReplacingOccurrencesOfString:@"Hello" withString:@"你好"]; 16 NSLog(@"%@",str4); 17 18 //读取文件 19 //文件来源:1.本地文件 2.网络文件 20 //路径类 21 NSString *strurl = @"http://www.cnblogs.com/goodboy-heyang/p/4659795.html"; 22 NSString *strurl2 = @"/Users/HeYang/Desktop/Hello.txt"; 23 //网络路径 24 NSURL *httpurl = [NSURL URLWithString:strurl]; 25 //本地路径 26 // NSURL *fileurl = [NSURL fileURLWithPath:strurl2];读取本地路径可以不需要URL路径类,直接用路径字符串就可以了 27 //读取网络数据 28 NSString *httpstr = [NSString stringWithContentsOfURL:httpurl encoding:NSUTF8StringEncoding error:nil]; 29 NSLog(@"%@",httpstr); 30 //读取本地文件 31 NSString *filestr = [NSString stringWithContentsOfFile:strurl2 encoding:NSUTF8StringEncoding error:nil]; 32 NSLog(@"%@",filestr); 33 34 //写入文件 35 NSString *str5 = @"Hello developer"; 36 BOOL isok = [str5 writeToFile:@"/Users/HeYang/Desktop/Demo.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil]; 37 if (isok) { 38 NSLog(@"文件写入成功~"); 39 }else{ 40 NSLog(@"文件写入失败~"); 41 } 42 } 43 return 0; 44 }
实战演练:查找天气预报城市列表的某一个城市:"玉山"以及它在城市列表中的序号。天气预报城市列表的网址:http://api.k780.com:88/?app=weather.city&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json
要求:两种方式:1⃣️本地文件查找2⃣️网络数据加载后查找
1⃣️本地文件查找方式:
先通过这个城市列表的网址获取所有关于城市的列表数据,然后复制粘贴到新建的纯文本记事本上,保存到桌面上,文件名为:file.txt
然后通过应用前面的基础:
1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) { 4 @autoreleasepool { 5 //路径,在桌面创建一个file.txt纯文本,然后通过终端可以获取完整路径 6 NSString *filepath = @"/Users/HeYang/Desktop/file.txt"; 7 //读取本地文件数据存储在一个NSString对象中: 8 NSString *filestr = [NSString stringWithContentsOfFile:filepath encoding:NSUTF8StringEncoding error:nil]; 9 NSRange range = [filestr rangeOfString:@"玉山"]; 10 NSLog(@"%ld 和 %ld",range.location,range.length); 11 NSRange findrange = NSMakeRange(range.location-33, 76); 12 NSString *findstr = [filestr substringWithRange:findrange]; 13 NSLog(@"%@",findstr); 14 15 } 16 return 0; 17 }
运行结果:
2⃣️网络数据加载后查找
开始出现了错误。
纠正之后:
1 int main(int argc, const char * argv[]) { 2 @autoreleasepool { 3 //获取网络路径 4 NSString *strurl = @"http://api.k780.com:88/?app=weather.city&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json"; 5 NSURL *url = [NSURL URLWithString:strurl]; 6 7 NSString *httpstr = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 8 //然后是查找“玉山” 9 NSRange range = [httpstr rangeOfString:@"玉山"]; 10 NSLog(@"%ld 和 %ld",range.location,range.length); 11 12 //然后是查找"玉山"的前后全面信息,这个需要不断更改range的起点位置和长度 13 //纠正一下,这里虽然目的是查找,但是实际上是截取目标位置和长度的字符串,所以用的是截取方法 14 NSRange range1 = NSMakeRange(range.location-33, 76); 15 NSString *findstr = [httpstr substringWithRange:range1]; 16 NSLog(@"%@",findstr); 17 } 18 return 0; 19 }
运行结果是: