美文网首页
NSString相关使用

NSString相关使用

作者: Coder007 | 来源:发表于2016-12-14 14:08 被阅读23次
    字符串的创建
    • 通过不同的方式创建字符串,字符串对象存储的位置也不一样

      • 如果通过字符串常量创建,那么字符串对象存储在常量区中
      • 如果通过alloc initWithFormat/stringWithFormat创建,那么字符串对象存储在堆取中
    • 注意:在Xcode6之后,只要创建的不是字符串常量,那么不管创建多少分相同的字符串,地址都是相同的

    字符串读写
    // 从文件中读取
    NSString *path = @"/Users/coder/Desktop/sublime.txt";
    NSError *error = nil;
    /**
     file:文件路径
     encoding:编码
     error:保存错误信息
     */
    NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    
    if(error == nil){
        // 没有错误
        NSLog(@"%@",str);
    }else{
        // 有错误
        NSLog(@"%@",error.localizedDescription);
    }
    
    • 将字符串写入文件,那么重复写入同一个文件,那么会覆盖之前写入的
    // 将字符串写入到文件中
    NSString *path = @"/Users/coder/Desktop/sublime1.txt";
    NSString *str = @"好好撸代码";
    /**
     atomically:如果传入YES,字符串写入文件的过程中如果没有写完,那么不会生成文件
                如果传入NO,字符串写入文件的多城中如果没有写完,会生成文件
     */
    BOOL flag = [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
    
    • NSURL
    • URL的创建
    // 1、通过URLWithString创建
    NSURL *url1 = [NSURL URLWithString:@"https://www.baidu.com"];
    
    // 2、通过fileURLWithPath创建
    NSURL *url2 = [NSURL fileURLWithPath:@"/Users/coder/Desktop/sublime1.txt"];
    
    • 通过fileURLWithPath:方法创建URL,那么系统将会自动给字符串加上file://,所以字符串中不用再写了
    • url不支持中文,如果url中包含中文,那么无法访问
    • 如果是通过fileURLWithPath:方法创建的url,可以进行访问的,系统内部会自动对URL中包含的中文进行处理
    • 如果使用URLWithString创建,不可以进行访问,转换之前通过编码就可以stringByAddingPercentEscapesUsingEncoding
    NSString *path = @"file:///Users/coder/Desktop/大众.txt";
    path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:path];
    
    字符串比较
    • 转换大小写
    NSString *str = @"welcome";
    // 全部字符转换成大写
    str = [str uppercaseString];
    // 全部字符转换成小写
    str = [str lowercaseString];
    // 首字母大写,其他字母小写
    str = [str capitalizedString];
    
    
    • 字符串比较
    // NSString的比较
    NSString *str1 = @"yyy";
    NSString *str2 = @"yyy";
    
    • isEqualToString:
    • 两个字符串相同就返回YES,否则就返回NO
    if([str1 isEqualToString:str2]){
        // 字符串内容一样
    }
    if(str1 == str2){
        // 字符串地址一样
    }
    
    • compare:
    • 这个方法可以用来比较两个字符换内容的大小
    • 比较方法:逐个字符的进行比较ASCII值,返回NSComparisonResult作为比较结果
    • NSComparisonResult是一个枚举,有3个值:
      • 如果左侧 > 右侧,返回NSOrderedDescending,
      • 如果左侧 < 右侧,返回NSOrderedAscending,
      • 如果左侧 == 右侧返回NSOrderedSame
    switch ([str1 compare:str2]) {
        case NSOrderedAscending:
            // str2 大于 str1
            break;
        case NSOrderedDescending:
            // str1 大于 str2
            break;
        case  NSOrderedSame:
            // 两个字符串相等
            break;
        default:
            break;
    }
    
    • caseInsensitiveCompare:
    • 忽略大小写进行比较,返回值与compare:方法一样
    switch ([str1 caseInsensitiveCompare:str2]) {
        case NSOrderedAscending:
            // str2 大于 str1
            break;
        case NSOrderedDescending:
            // str1 大于 str2
            break;
        case  NSOrderedSame:
            // 两个字符串相等
            break;
        default:
            break;
    }
    
    字符串搜索
    // 是否是以str开头
    - (BOOL)hasPrefix:(NSString *)str;
    // 是否是以str结尾
    - (BOOL)hasSuffix:(NSString *)str;
    
    // 用来检查字符串内容中是否包含了searchString
    // 如果包含就返回searchString的范围
    // 如果不包含,NSRange的location为NSNotFound,length = 0
    - (NSRange)rangeOfString:(NSString *)searchString;
    
    
    • NSRange
    • NSRange的定义
    typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
    } NSRange;
    
    typedef unsigned long NSUInteger;
    
    • NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里面元素范围

    • NSRange有两个成员:

      • NSUInteger location:表示该范围起始位置
      • NSUInteger length:表示该范围的长度
    • NSRange创建的三种方式

    // 方式1
    NSRange range;
    range.location = 8;
    range.length = 1;
    
    // 方式2
    NSRange range = {4,2};
    NSRange range = {.location = 7, .length = 10};
    
    // 方式3
    NSRange range = NSMakeRange(10, 10);
    
    字符串截取
    • - (NSString *)substringFromIndex: (NSUInteger)from;
      • 从指定位置from开始,到字符串尾部,包含from位置的字符
    NSString *str = @"0123456789";
    str = [str substringFromIndex:8];
    NSLog(@"%@",str);
    // 输出结果:89
    
    • - (NSString *)substringToIndex: (NSUInteger)to;
      • 从字符串开头一直到指定位置to,不包含to位置字符
    NSString *str = @"0123456789";
    str = [str substringToIndex:7];
    NSLog(@"%@",str);
    // 输出结果:0123456
    
    • - (NSString *)substringWithRange: (NSRange)range;
      • 按参数range截取字符串
    NSString *str = @"0123456789";
    str = [str substringWithRange:NSMakeRange(1, 2)];
    NSLog(@"%@",str);
    // 输出结果:12
    
    字符串替换
    // 将所有的3都替换成4
    NSString *str = @"123123123";
    str = [str stringByReplacingOccurrencesOfString:@"3" withString:@"4"];
    
    // 去除首尾空格
    NSString *str1 = @"    123123   ";
    str1 = [str1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    
    // 去除首尾其他字符
    NSString *str2 =  @"***123123***";
    str2 = [str2 stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"*"]];
    
    字符串和路径
    • 绝对路径
    // 判断是否是绝对路径
    // 其实就是判断是否以/开头
    NSString *str = @"/Users/coder/Desktop/sublime.txt";
    if(str.isAbsolutePath){
        NSLog(@"是绝对路径");
    }else{
        NSLog(@"不是绝对路径");
    }
    
    • 获得最后一个目录
    NSString *str = @"/Users/coder/Desktop/sublime.txt";
    NSString *component = [str lastPathComponent];
    NSLog(@"%@",component);//sublime.txt
    
    • 删除最后一个目录
    NSString *str = @"/Users/coder/Desktop/sublime.txt";
    NSString *newStr = [str stringByDeletingLastPathComponent];
    NSLog(@"%@",newStr);// /Users/coder/Desktop
    
    • 在路径后面拼接一个目录
    // 在路径后面拼接一个目录
    // 其实就是在最后面加上/和要拼接得内容
    // 注意会判断后面有没有/有就不添加了, 没有就添加, 并且如果有多个会替换为1个
    NSString *path = @"/Users/coder/Desktop///";
    path = [path stringByAppendingPathComponent:@"123"];
    NSLog(@"%@",path); // /Users/coder/Desktop/123
    
    
    • 获得扩展名
    NSString *strPath = @"Desktop.sublime.txt";
    NSString *newStr1 = [strPath pathExtension];
    NSLog(@"%@",newStr1);// txt
    
    • 删除扩展名
    NSString *newStr2 = [strPath stringByDeletingPathExtension];
    NSLog(@"%@",newStr2);// Desktop.sublime
    
    • 在尾部添加一个扩展名
    NSString *newStr3 = [strPath stringByAppendingPathExtension:@"gif"];
    NSLog(@"%@",newStr3); // Desktop.sublime.txt.gif
    
    字符串和其他类型数据转换
    • 转换为基本数据类型
      • doubleValue
      • floatValue
      • intValue
    // 注意: 如果不是int,double,float,bool,integer,longlong这些类型就不要乱用
    NSString *str1 = @"111";
    NSString *str2 = @"123.1";
    [str1 integerValue];
    [str2 doubleValue];
    
    • 和C语言字符串互相转换
    // OC字符串转换为C语言字符串
    NSString *str3 = @"1324";
    const char *cStr = [str3 UTF8String];
    
    // C语言字符串转换成OC字符串
    char *cStr = "abc";
    NSString *str4 = [NSString stringWithUTF8String:cStr];
    

    相关文章

      网友评论

          本文标题:NSString相关使用

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