------------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!------------
NSString的基本认识
1、基本使用
/* 1、字符串的创建 (一般对象方法不用都是使用类方法) 直接赋值方式 (常用) alloc 、initxxx 偶尔用 类方法 (常用):常用于拼接字符串、把基本数据类型转换为字符类型 注意: string是不可变字符串,如果初始化没有赋值,就会为空,不可添加,只能更改指向 */ NSString *s1 = @"abcdef"; // 直接赋值 NSString *s2 = [[NSString alloc] initWithFormat:@"aabbcc%d",10]; //alloc、initxx NSString *s3 = [NSString stringWithFormat:@"age is %d", 10]; //类方法 s1 = @"abcdf"; // 直接修改指向 /* 2、对数据转换的操作 1》基本数据类型转换为字符串 2》常用结构体类型转换为字符串 3》oc和c字符串的转换 */ // 基本数据类型转换为字符串 NSString *numStr = [NSString stringWithFormat:@"age is %d", 10]; // int类型转换为字符串类型 NSString *doubleStr = [NSString stringWithFormat:@"高度是: %.2f", 10.0]; // double转换为字符串类型 // 结构体转换为字符串类型(是函数方法,不是string对象或类方法) CGRect rect = CGRectMake(10, 10, 10, 10); NSString *rectStr = NSStringFromRect(rect); // 结构体转换为字符串 (函数方法) //oc 和 c 字符串相互转换 NSString *s4 = [[NSString alloc] initWithUTF8String:"abcd"]; // 将c字符串转换为 oc字符串 NSString *s5 = [NSString stringWithUTF8String:"abcd"]; const char *str5 = [s3 UTF8String]; // oc转换为c字符串 /* 3、常用对其内容的操作 1》是否包含某个字符串->rangeOfString 2》遍历: length 、characterAtIndex 3》判断是否包含数字 */ // 判断字符串是否包含某个字符串(根据location是否是:NSNotFound) NSString *str = @"abcd efgh jk"; NSRange range = [str rangeOfString:@"bc"]; if (range.location == NSNotFound) { NSLog(@"没有"); }else{ NSLog(@"有"); } NSLog(@"-----字符串的遍历,并输出-------------"); // 遍历,characterAtIndex 根据索引值获取对应的字母,返回是字符类型 str = @"我们"; NSLog(@"length = %zd", str.length); // 结构是:2 (返回的是字符个数,而不是字节数) str = @"abcd 1 cd0e 2"; for (int i = 0; i<str.length; i++) { NSLog(@"%d ,%c",i,[str characterAtIndex:i]); } NSLog(@"-----判断是否有数字,并取出-------------"); // 判断是否包含数字 ——》根据asc码表种数字对应的值来判断 for (int i = 0; i<str.length; i++) { if ([str characterAtIndex:i] >= '0' && [str characterAtIndex:i] <= '9') { // 必须是字符类型,根据的是asc码表种数字对应的值来判断 NSLog(@"%c",[str characterAtIndex:i]); } } /* 4、对文件的操作 1》文件的读取 2》文件的写入 */ NSLog(@"-----读取操作文件(文本路径)-------------"); // 根据全路径,读取文本文件 NSString *path = @"/Users/an1911/Desktop/经典代码/Founcation框架的重点知识点/读取写入文件/readme.txt"; NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; NSLog(@"\n%@",content); NSLog(@"-----读取操作网络资源(也可以读取文件)-------------"); /* URL : 资源路径 (可以读取文本文件,但资源路径不可以有中文) 协议头://路径 file://文本路径 http://网址 */ NSURL *url = [NSURL URLWithString:@"file:///Users/an1911/Desktop/经典代码/Founcation框架的重点知识点/读取写入文件/readme.txt"]; // 不可包含汉字,且必须是全路径,包括后缀名 NSLog(@"有中文的url = %@",url); // url为空 content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"有中文——》\n%@",content); url = [NSURL fileURLWithPath:@"/Users/an1911/Desktop/经典代码/Founcation框架的重点知识点/读取写入文件/readme.txt"]; // 如果确定是文本,可用这种方式() NSLog(@"fileURLWithPath——》地址:\nurl = %@",url); content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"fileURLWithPath——》读取的内容:\n%@",content); url = [[NSURL alloc] initWithString:@"file:///Users/an1911/Desktop/readme.txt"]; NSLog(@"无中文——》url = %@",url); content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"\n%@",content); url = [NSURL URLWithString:@"http://www.baidu.com"]; //content = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; // NSLog(@"\n%@",content); NSLog(@"-----写入操作文本文件(对象方法)-------------"); NSString *writeStr = @"JAVA1\nJAVA2"; // 使用\n作为写入的换行 [writeStr writeToFile:@"/Users/an1911/Desktop/write.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil]; url =[NSURL fileURLWithPath:@"/Users/an1911/Desktop/write2.txt"]; // url = [NSURL URLWithString:@"file:///Users/an1911/Desktop/write2.txt"]; [writeStr writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
2、可变字符串的基本使用
NSMutableString *str = [NSMutableString stringWithFormat:@"abcef"]; [str appendString:@" hi"]; //在后面添加新的字符串(不会返回新的字符串,而是在原来的基础上改变) NSLog(@"%@",str); NSRange range = [str rangeOfString:@"bc"]; //[str deleteCharactersInRange:NSMakeRange(2,3)]; //删除range范围的字符串,CGRangeMake没有这个 [str deleteCharactersInRange:range]; NSLog(@"%@",str); // 注意NSString 的 方法,结果是返回一个新的字符串,但是原来的字符串没有改变 NSString *str2 = @"abcdef"; NSString *newStr2 = [str2 stringByAppendingString:@"12121"]; NSLog(@"%@",str2); NSLog(@"%@",newStr2);
3、读取文件内容,并计算文件的总行的函数
NSUInteger countRows(NSString *path){ // 1、创建文件管理对象 NSFileManager *manger = [NSFileManager defaultManager]; // 2、判断是文件夹还是文件,并获取是否存在这个路径 BOOL isDir = NO; BOOL isExist = [manger fileExistsAtPath:path isDirectory:&isDir]; // 3、判断是否存在 if(!isExist) return 0; //如果不存在就直接返回 // 如果是文件夹 if (isDir) { NSUInteger sumCount = 0; // 定义接收总行数的变量 // 1>获取文件夹内所有内容(文件夹 和 各种) NSArray *contents = [manger contentsOfDirectoryAtPath:path error:nil]; // 循环数组 for (NSString *str in contents) { // 2>拼接当前文件夹内的文件或文件夹的全路径 NSString *fullPath = [NSString stringWithFormat:@"%@/%@", path,str]; // 3>递归方式获取总行数 sumCount += [CountRowsOfManyFile countRows:fullPath]; } return sumCount; }else{ // 如果是文件 // 判断文件的拓展名,只有是m和h后缀的可以通过 (拓展可能是大小写,避免小写的影响,一律转换为大写) NSString *extension = [[path pathExtension] uppercaseString]; if ([extension isEqualToString:@"H"] || [extension isEqualToString:@"M"]) { //if (extension == "H" || extension == "M") // 1>获取文件的内容 NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; // 2>计算内容的行数(分成数组、计算数组个数) NSArray *array = [content componentsSeparatedByString:@"\n"]; // 3> 为了输出方便看,把公共的文件夹路径取消 NSRange range = [path rangeOfString:@"/Users/an1911/Desktop/经典代码/Founcation框架的重点知识点/读取写入文件/"]; // 截取公共的文件夹路径范围 // NSString *newPath = [path substringFromIndex:range.length]; // 从index开始,取后面的(不包括当index) NSString *newPath =[path stringByReplacingCharactersInRange:range withString:@""]; NSUInteger count = array.count; NSLog(@"%@ :%zd", newPath, count); return count; }else{ return 0; } } }