NSString

作者: 哔哩哔哩智能喵 | 来源:发表于2016-08-19 14:34 被阅读0次

NSString字符串

  • 通过不同方式创建的字符串,字符串对象存储的位置也不一样
    • 如果是通过字符串常量创建,那么字符串对象存储在常量区中
    • 如果是通过alloc initiWithFormat/stringWithFormat创建,那么字符串对象存储在堆区中
  • 注意:
    • 不同的平台存储的方式也不一样,如果是Mac平台系统会自动对字符串对象进行优化
    • 不同的编译器存储的方式也不一样
         1.通过字符串常量创建
         如果通过字符串常量创建字符串对象,并且字符串常量的内容一致,那么如果创建多个字符串对象,多个对象指向同一块存储空间
         
        NSString *str1 = @"lxc";
        NSString *str11 = @"lxc";
        
         2.通过alloc init 创建
         只要调用了alloc就会在堆内存中开辟一块存储空间
         
        NSString *str2 = [[NSString alloc]initWithFormat:@"lxc"];
        NSString *str22 = [[NSString alloc]initWithFormat:@"lxc"];
        
         3.通过类工厂方法创建/stringWithFormat
         内部其实就是封装了alloc init
         
        NSString *str3 = [NSString stringWithFormat:@"lxc"];
        NSString *str33 = [NSString stringWithFormat:@"lxc"];
  • file:文件路径
  • encoding:编码英文 一般情况下UTF-8
  • error:如果读取错误,会将错误新保存到error中,如果读取正确,就没有error = nil
  • 如果error = nil代表正确,就正常执行
  • 如果不是的话就打印一下错误信息,[error localizedDescription]
//从文件中读取字符串  
 NSString *path = @"/Users/yao/Desktop/LXC.text";
        NSError *error = nil;
        //从文件中读取字符串
        NSString *string = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
        if (error == nil) {
            NSLog(@"string = %@",string);
        }else
        {
            NSLog(@"error = %@",[error localizedDescription]);
        }
        //把字符串写入到文件中
        NSString *str = @"LXC is every cool";
        NSString *path2 = @"/Users/yao/Desktop/LXC.text";
        //atomically 如果传入YES,字符串写入文件的过程中没有写完,那么不会生成文件
        //           如果传入NO,字符串写入文件的过程中如果没有写完,会生成文件
        BOOL flag = [str writeToFile:path2 atomically:YES encoding:NSUTF8StringEncoding error:nil];

字符串比较

 NSString *str1 = @"abc";
        NSString *str2 = @"abc";
        //比较两个字符串的"内容"是否相同
        BOOL flag =[str1 isEqualToString:str2];
        //比较两个字符串的"地址"是否相同
        flag =  (str1 == str2);
        //比较两个字符串的大小
        switch ([str1 compare:str2]) {
            case NSOrderedAscending:
                NSLog(@"st1<str2");
                break;
            case NSOrderedSame:
                NSLog(@"st1=str2");
                break;
            case NSOrderedDescending:
                NSLog(@"st1>str2");
                break;
        }
        //忽略大小写进行比较
        switch ([str1 caseInsensitiveCompare:str2]) {
            case NSOrderedAscending:
                NSLog(@"st1<str2");
                break;
            case NSOrderedSame:
                NSLog(@"st1=str2");
                break;
            case NSOrderedDescending:
                NSLog(@"st1>str2");
                break;
        }

字符串搜索

NSString *str1 = @"www.baidu.com";
        //判断一个字符串前缀是否匹配,不匹配就返回0
        if ([str1 hasPrefix:@"www"]) {
            NSLog(@" have www");
        }
        //判断一个字符串是否以什么结尾,不是就返回0
        if ([str1 hasSuffix:@"com"]) {
            NSLog(@" have com");
        }
        //判断一个字符串是否包含什么,会返回一个location代表字符串的位置,还会返回一个length代表字符串的长度
        NSRange range = [str1 rangeOfString:@"baidu"];
        if (range.length ==0) {
            NSLog(@"字符串中不包含baidu");
        }else
        {
             NSLog(@"字符串中包含baidu");
        }

字符串截取

//1.动态获取字符串的位置,location +1 就等于>的位置+1就是lxc
        NSUInteger location = [str1 rangeOfString:@">"].location +1;
        //2.动态获取字符串的长度,NSBackwardsSearch是倒叙截取
        NSUInteger length = [str1 rangeOfString:@"<" options:NSBackwardsSearch].location - location;
        NSRange range = {location,length};
        //3.截取字符串,根据动态获取的字符串位置和字符串长度
        NSString *newStr1 = [str1 substringWithRange:range];
        NSLog(@"newStr1 = %@",newStr1);
        
        //从第几位开始截取,一直截取到最后
        NSString *newStr2 = [str1 substringFromIndex:6];
        NSLog(@"newStr2 =%@",newStr2);
        
        //从开始截取,一直截取到什么位置
        NSString *newStr3 = [str1 substringFromIndex:6];
        NSLog(@"newStr3 =%@",newStr3);

相关文章

网友评论

      本文标题:NSString

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