现在的位置: 首页 > 综合 > 正文

黑马程序员——iOS开发——oc——NSString的学习

2017年11月26日 ⁄ 综合 ⁄ 共 5213字 ⁄ 字号 评论关闭
------------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;
           
       }
        
    }
    
}

抱歉!评论已关闭.