美文网首页
OC基础 - 字符串的常见使用

OC基础 - 字符串的常见使用

作者: ShIwEn9 | 来源:发表于2019-01-17 20:41 被阅读0次
    引言:

    在日常的开发中,我们在的Foundationl框架中用到的最多的就是NSString了,不管是界面搭建,还是网络上的数据传递。NSString都是充当着绝对的主角和基石。所以对NSString的熟练程度自然是不言而喻了。
    所以对于刚刚步入ios开发的我来说总结一篇关于NSString的文章自然就显得很重要。

    (一)NSString的一些用法介绍

    一、最常用一些方式

    1.字符串最常见的创建方式

    //NSString的使用
    char *s = "hello Objective-C" ;
    NSString * str = @"hello " ;
    
    1. 字符串的创建
    //方式一:系统会自动对象并且会自动释放内存
    NSString * str2 = @"hello" ;
    //方式二:手动创建,手动释放内存
    NSString * str3 = [[NSString alloc]init] ;
    str3 = @"yayuanzi" ;
    

    3.格式化字符串

    //格式化字符串
    int a = 5 ;
    int b = 6 ;
    NSString *number = [NSString stringWithFormat:@"a= %d , b = %d",a,b] ;
    
    输入栏
    二、较为常用的方式
    1. 拼接字符串
    //将str3拼接到str2上
            NSString *str4 = [str2 stringByAppendingString:str3] ;
            NSLog(@"str4 = %@",str4) ;
    

    2.大小写的转换

    NSString * str5 = @"yaYUANzi";
            //转换小写 lowercaseString
            NSString *str6 = [str5 lowercaseString];
            //转换大写 uppercaseString
            NSString *str7 = [str5 uppercaseString] ;
            NSLog(@"str6 = %@ , str7 = %@ ",str6,str7) ;
    

    3.前缀和后缀的判断

    NSString *str8 = @"www.yayuanzi.com" ;
            //判断前缀 hasPrefix
    BOOL hasPreFix = [str8 hasPrefix:@"www."] ;
            if (hasPreFix) {
                NSLog(@"有对应的www前缀") ;
            }else{
                NSLog(@"没有对应的www前缀") ;
            }
            //判断后缀 hasSuffix
            BOOL hasSuffix = [str8 hasSuffix:@".com"] ;
            if (hasSuffix) {
                NSLog(@"有对应的com前缀") ;
            }else{
              
    

    4.判断两个字符串是否相同

     NSString *str9 = @"www.yayuanzi.com" ;
            NSString *str10 = @"www.yayuanzi.com" ;
            if ([str9 isEqualToString: str10]) {
                NSLog(@"两个字符串相同") ;
            }else{
                NSLog(@"两个字符串不相同") ;
            }
    
            //比较字符串
           NSComparisonResult方法:这个方法比较特殊,后面单独的回去说.
    

    5.字符串的分割

    NSRange的定义可以理解为从location开始的length个元素
    typedef struct _NSRange {
    NSUInteger location; //表示对象开始的下标
    NSUInteger length; //表示对象长度
    } NSRange;

    //分割
            //按照指定的字符分割字符串
            NSString *str11 = @"welcome,to,ya,yuan,zi" ;
            NSArray * strArray = [str11 componentsSeparatedByString:@","] ;
            for (NSString *str in strArray) {
                NSLog(@"%@",str) ;
            }
            NSLog(@"----------按照范围截取字符串") ;
            //按照范围截取字符串
            //1.按照指定范围
            NSRange range = NSMakeRange(1, 10) ;
            NSString *str12 = [str11 substringWithRange:range] ;
            NSLog(@"str12 = %@",str12) ;
            //2.从某一位开始截取到最后一位
            NSString *str13 = [str11 substringFromIndex:3] ;
            NSLog(@"str13 = %@",str13) ;
            //3.从开头开始截取到某一位
            NSString *str14 = [str11 substringToIndex:4] ;
            NSLog(@"str14 = %@",str14) ;
            //4.将字符串拆分成每一个字符
            for (int i = 0; i < [str11 length]; i++) {
                NSLog(@"%c",[str11 characterAtIndex:i]) ;
            }
    

    6.字符串的查找

    NSString *str15 = @"yayuanziya" ;
            //查找指定字符串的位置
    NSRange range1 = [str15 rangeOfString:@"ya"] ;
    NSLog(@"range1.location:%ld range1.length:%ld",range1.location,range1.length) ;
    

    7.字符串的替换

    //替换
            NSString *str16 = @"hello yayuanzi" ;
            //替换某一个范围的内容
            NSString *str17 = [str16 stringByReplacingCharactersInRange:NSMakeRange(0, 5) withString:@"你好"] ;
            NSLog(@"str17 = %@",str17) ;
            //用指定的字符串替换原有字符串的子串
            NSString *str18 = [str16 stringByReplacingOccurrencesOfString:@"hello" withString:@"你好"] ;
            NSLog(@"str18=%@",str18) ;
    

    8.通过字符串读取文件

    文件的来源:1.本地文件 2.网络文件

    NSString *str19 = @"http://www.yayuanzi.com" ;
    //路径类 NSURL
    //网络路径
    NSURL * httpURL = [NSURL URLWithString:str19] ;
    //本地路径
    NSURL *fileURl = [NSURL fileURLWithPath:str19] ;
            
    //读取网络文件
    NSString *httpStr = [NSString stringWithContentsOfURL:httpURL encoding:NSUTF8StringEncoding error:nil] ;
    NSLog(@"httpStr = %@ ",httpStr) ;
    //读取本地的文件
    NSString *fileStr = [NSString stringWithContentsOfFile:@"/Users/123/Desktop/test.txt" encoding:NSUTF8StringEncoding error:nil] ;
    NSLog(@"fileStr = %@",fileStr) ;
            
    //写入本地文件
    NSString *str20 = @"hello yayuanzi" ;
    BOOL isOK = [str20 writeToFile:@"/Users/123/Desktop/test.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil] ;
    if (isOK) {
        NSLog(@"文件写入成功") ;
    }else{
        NSLog(@"文件写入失败") ;
         }
    
    1. C和OC之间的转换
    //将c转化为oc
            NSString *str1 = [NSString stringWithUTF8String:s] ;
            NSLog(@"str1 = %@",str1) ;
            //将oc转化为c
            NSLog(@"c = %s",[str UTF8String]) ;
    
    1. 把字符串转换为二进制数据
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding] ;
    
    1. 将二进制数据转换为字符串
        NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding] ;
    

    二、可变字符串的使用

    1. 创建可变字符串
    SMutableString *mutStr = [[NSMutableString alloc]initWithCapacity:10] ;
    [mutStr setString: @"hello"] ;
    
    1. 追加字符串
    [mutStr appendString:@"yayuanzi"] ;
    NSLog(@"sr = %@",mutStr) ;
    int num = 123 ;
     [mutStr appendFormat:@" - %d",num] ;
    
    1. 替换字符串
    NSRange range4= [mutStr rangeOfString:@"yayuanzi"] ;
    [mutStr replaceCharactersInRange:range4 withString:@"world"] ;
    NSLog(@"mutstr = %@",mutStr) ;
    
    1. 插入字符串
    [mutStr insertString:@"-" atIndex:5] ;
    NSLog(@"sr = %@",mutStr) ;
    
    1. 删除字符串
    NSRange range5 = [mutStr rangeOfString:@"hello"] ;
    [mutStr deleteCharactersInRange:range5] ;
    NSLog(@"sr = %@",mutStr) ;
    

    三、 面试题

    1. 写一个NSString类的实现
    + (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding;
    

    实现如下:

    + (id) stringWithCString: (const char*)nullTerminatedCString 
    
                encoding: (NSStringEncoding)encoding
    
    {
    
      NSString  *obj;
    
      obj = [self allocWithZone: NSDefaultMallocZone()];
    
      obj = [obj initWithCString: nullTerminatedCString encoding: encoding];
    
      return AUTORELEASE(obj);
    
    }
    
    1. 判断两个NSString的字面量是否相同,为什么要用isEqualToString来判断,而不能用==来判断呢?

    因为==判断的是两个指针是否相等,而NSString是分配到堆上的,每次创建的时候,指针指向的地址的不同的,所以不能用==来判断。但是这样的回答不完整。这个题感觉有点毛病,字面量本身就只有一种方式,@""; 直接创建等于赋值,这种方式创建的类型都是__NSCFConstantString,本身也不会有引用计数,所以它就是一个对象,这个是可以用==来判断的,我想题的意思应该是NSString创建的字符串,是否相等,要用isEqualToString来判断,因为字符串的创建方式不同,类型不同,地址不同,单纯从==来判断的话,不准确。

    相关文章

      网友评论

          本文标题:OC基础 - 字符串的常见使用

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