美文网首页
objective-c NSString

objective-c NSString

作者: 一世长安乱 | 来源:发表于2018-04-10 16:40 被阅读0次

    NSString创建方法

    1. 通过字符串常量创建:存储在字符串常量区,如果创建多个字符串常量,且内容一致,那么多个对象会指向同一块存储空间

    NSString *str1 = @"作者是个大帅逼";
    ```

    1. 通过alloc init创建:存储在堆区

    NSString *str2 = [[NSString alloc] initWithFormat:@"作者是个大帅逼"];
    ```

    1. 通过类工厂方法创建:存储在堆区

      NSString *str2 = [NSString stringWithFormat:@"作者是个大帅逼"];
      
    2. 注意:一般情况下,只要是通过alloc或者类工厂方法创建的对象,每次都会在堆内存中开辟一块新的存储空间。但是如果是通过alloc和initWithString方法,那就除外,因为这个方法是通过copy返回一个字符串对象。copy分为浅拷贝和深拷贝,如果是深拷贝就会创建一个新的对象,如果是浅拷贝就不会创建一个新的对象,而是直接返回一个地址给我们。initWithString是浅拷贝,无论在什么平台什么编译器都是指向同一个存储空间


    读取文件中的字符串##

    NSString *str = [NSString stringWithContentsOfFile:文件路径 encoding:编码 error:读取错误会将错误信息保存];
    //编码一般是UTF-8:NSUTF8StringEncoding
    //一般这样使用:
    
    //文件路径
    NSString *path = @"";
    //错误信息
    NSError *error = nil;
    NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    //判断是否出错
    if (error == nil) {
        NSLog(@"str = %@", str);
    }
    else{
        NSLog(@"error = %@",[error localizedDescription]);
    }
    

    将字符串写入文件中##

    NSString *str = @"作者是个大帅比";
            //atomically 如果传入YES,字符串写入文件过程中如果没有写完,那么不会生成文件
            //           如果传入NO,字符串写入文件过程中没有写完,会生成文件
            NSString *path = @"/Users/UsersName/Desktop/abc.txt";
            NSError *error = nil;
            BOOL flag = [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
            NSLog(@"flag = %i", flag);
    

    URL##

    • URL固定格式
      • 包含协议、主机域名(服务器名称/IP地址)、路径
      • URL = 协议头://主机域名/路径
    • 常见的URL协议头
      • http/https:// :超文本传输协议资源,网络资源
      • ftp:// :文件传输协议
      • file:// :本地电脑文件
    • URL创建
    //传入完整的字符串创建
    NSURL *url = [NSURL URLWithString: @""];
    //通过文件路径创建(默认就是file协议)
    NSURL *url = [NSURL fileURLWithPath: @""];
    

    通过URL访问文件##

    //1.创建URL
            //协议头 + 主机地址 + 文件路径
            NSString *path = @"协议头 + 主机地址 + 文件路径";
            NSURL *url = [NSURL URLWithString:path];
            NSError *error = nil;
            //2.根据URL加载文件中的字符串
            NSString *str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
            if (error == nil) {
                NSLog(@"str = %@", str);
            }
            else
            {
                NSLog(@"error = %@", [error localizedDescription]);
            }
    
    //注意:如果加载的资源是本机上的资源,那么URL中的主机地址可以省略
    //但是文件路径前的/不能省略,文件路径最前面的/代表根路径
    //如果使用的是fileURLWithPath,系统自动添加协议头
    //访问本机资源创建URL时,建议使用fileURLWithPath
    //URL不支持中文,有中文无法访问,使用fileURLWithPath会对中文处理
    //如果不使用fileURLWithPath,就要先对字符串进行处理
    (NSString *) = [(NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSString *)]
    
    

    文件写入##

    NSString *str = @"1";
    NSURL *url = [NSURL URLWithString:@"file:///Users/y1shichanganluan/Desktop/abd.txt"];
    NSError *error = nil;
    [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:&error];
    if (error == nil) {
        NSLog(@"str = %@", str);
    }
    else{
        NSLog(@"error = %@", [error localizedDescription]);
    }
    

    注意:多次往同一个文件写入内容,那么最后一次就会覆盖前一次的


    字符串比较##

    比较字符串内容是否相等
    //比较字符串内容是否相等
    //返回类型是BOOL
    [(NSString *) isEqualToString:(NSString *)];
    
    比较字符串的大小
    //比较字符串的大小:compare
    NSString *str1 = @"a";
            NSString *str2 = @"b";
            /*compare函数返回三个值:NSOrderedAscending  NSOrderedSame, NSOrderedDescending*/
            switch ([str1 compare:str2]) {         
                case NSOrderedAscending:
                    NSLog(@"前面的小于后面的");
                    break;
                case NSOrderedSame:
                    NSLog(@"前面的等于后面的");
                    break;
                case NSOrderedDescending:
                    NSLog(@"前面的大于后面的");
                    break;
                default:
                    break;
    
    忽略大小写进行比较
    //忽略大小写进行比较:caseInsensitiveCompare
    NSString *str1 = @"a";
            NSString *str2 = @"A";
            /*compare函数返回三个值:NSOrderedAscending  NSOrderedSame, NSOrderedDescending*/
            switch ([str1 caseInsensitiveCompare:str2]) {
                case NSOrderedAscending:
                    NSLog(@"前面的小于后面的");
                    break;
                case NSOrderedSame:
                    NSLog(@"前面的等于后面的");
                    break;
                case NSOrderedDescending:
                    NSLog(@"前面的大于后面的");
                    break;
                default:
                    break;
            }        
        }
    

    字符串搜索##

    判断是否以xxx开头
    NSString *str1 = @"http//:www.baidu.com";
    //从第一个字符开始判断,只要不匹配返回NO
    if ([str1 hasPrefix:@"http"]) {
        NSLog(@"1");
    }
    else
        NSLog(@"2");
    
    判断是否以xxx结尾
    NSString *str1 = @"http//:www.baidu.com";
    //从字符串最后一个字符开始匹配,只要不匹配就返回NO
    if ([str1 hasSuffix:@"com"]) {
        NSLog(@"1");
    }
    else
        NSLog(@"2");
    
    判断字符串中是否包含xxx
    NSString *str1 = @"http//:www.baidu.com";
    //NSRange 是一个结构体,包含length和location
    //location从0开始,length从1开始
    //如果没有查找的字符串,length返回0,location返回NSNotFound
    NSRange range = [str1 rangeOfString:@"tb"];
    if (range.location == NSNotFound) {
        NSLog(@"没有查找的字符串");
    }
    else{
        NSLog(@"location = %lu, length = %lu", range.location, range.length);
    }
    

    字符串的截取##

    普通截取
    NSString *str1 = @"http啦啦啦";
    //凡是在OC中提供的结构体,都可以使用NSMakexxx来创建
    NSRange range = NSMakeRange(4, 3);
    NSString *str = [str1 substringWithRange:range];
    NSLog(@"%@",str);
    
    动态截取
    //1.动态获取截取的起始位置
    NSUInteger location = [str rangeOfString:@"p"].location + 1;
    //2.动态获取截取长度
    //注意:rangeOfString是从左至右的开始查找,只要找到就不找了
    NSUInteger length = [str rangeOfString:@"q"].location - location;
    NSRange range = NSMakeRange(location, length);
    NSString *tmpstr = [str substringWithRange:range];
    NSLog(@"%@",tmpstr);
    
    //可以从右到左开始查找
    NSUInteger length = [str rangeOfString:@"q" options:NSBackwardsSearch].location - location;
    //从什么地方开始截取,一直截到最后
    [str substringFromIndex:(NSUInteger)];
    //从开头开始截取,一直截取到xx位置
    [str substringToIndex:(NSUInteger)]
    

    字符串替换##

    替换字符
    NSString *str = @"w  ww/b ai du/c o   m";
    //Occurrences:被替换的字符
    //withString:用什么替换
    NSString *newstr = [str stringByReplacingOccurrencesOfString:@"/" withString:@"."];
    //去掉空格
    NSString *newstr = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"%@", newstr);
    
    替换首尾
    去除首尾空格
    NSString *str = @"      www.baidu.com       ";
    //此对象决定方法作用
    NSCharacterSet *set = [NSCharacterSet whitespaceCharacterSet];
    NSString *newstr = [str stringByTrimmingCharactersInSet:set];
    NSLog(@"%@", newstr);
    
    去除首尾大写
    NSString *str = @"WWWwww.baidu.comCOM";
    NSCharacterSet *set = [NSCharacterSet uppercaseLetterCharacterSet];
    NSString *newstr = [str stringByTrimmingCharactersInSet:set];
    NSLog(@"%@", newstr);
    

    字符串与路径##

    1.判断是否是绝对路径
    NSString *str = @"/Users/usersname/Desktop/abc.txt";
     //1.判断是否是绝对路径
    if ([str isAbsolutePath]) {
    NSLog(@"YES");
    }else{
    NSLog(@"NO");
    }
    
    2.获取文件路径中的最后一个目录
    //2.获取文件路径中的最后一个目录
    //获取路径中最后一个斜杠后面的内容
    NSString *str1 = [str lastPathComponent];
    
    
    3.删除文件路径中的最后一个目录
    //3.删除文件路径中的最后一个目录
    //删除最后一个/后面的内容(包括/)
    NSString *str2 = [str stringByDeletingLastPathComponent];
    
    4.给文件添加一个目录
    //4.给文件添加一个目录
    //本质就是在字符串末尾加上一个/和内容
    //如果有了/,就不会添加了
    //如果路径后面有多个//,会自动删除多余的斜线只保留一个/
    NSString *str3 = [str stringByAppendingPathComponent:@"lallaa"];
    
    5.获取路径中文件的扩展名
    //从字符串末尾开始查找.,截取第一个.后面的内容
    NSString *str4 = [str pathExtension];
    
    6.删除路径中文件的扩展名
    //从字符串末尾开始查找.,删除第一个.和后面的内容
    NSString *str5 = [str stringByDeletingPathExtension];
    
    7.给文件路径添加扩展名
    NSString *str6 = [str stringByAppendingPathExtension:@"txt"];
    

    字符串的转换##

    1.将字符串转换为大写
    NSString *str1 = [str uppercaseString];
    
    2.将字符串转换为小写
    NSString *str2 = [str lowercaseString];
    
    3.将字符串的首字符装换为大写
    NSString *str3 = [str capitalizedString];
    
    4.字符串与基本数据类型的转换
    //如果不是int,double,float,bool,integer,longlong这些类型不要乱用
    int value1 = [newstr1 intValue];
    int value2 = [newstr2 intValue];
    
    5.C语言字符串和OC字符串之间的转换
    char *cstr = "lalala";
    NSString *newstr = [NSString stringWithUTF8String:cstr];
    const char *cstr1 = [newstr UTF8String];
    

    NSMutableString##

    继承与NSString
    NSString是不可变的,NSMutableString是可变的

    1. 在字符串后面添加内容(方法返回为void)
    2. 删除字符串中的内容(方法返回为void)
    3. 在某处插入内容(方法返回为void)
    4. 替换内容

    相关文章

      网友评论

          本文标题:objective-c NSString

          本文链接:https://www.haomeiwen.com/subject/yqenhftx.html