Foundation使用示例(NSString、NSMutableString 、NSArray、NSMutableArray 、NSDictionary 、NSMutableDictionary)

1. NSString字符串比较

void test(){

    NSString *str = @"ccd";  // 3
    
    NSString *str2 = @"bcde";// 4
    
    //比较两个字符串大小:
    //比较每个字符的ascii码值
    //compare 比较字符串
    //str > str2    1
    //    <         -1
    //    ==         0
    //       NSComparisonResult result =  [str compare:str2];
    
    //指定条件的字符串比较
    //NSCaseInsensitiveSearch 不区分大小写
    //默认的区分大小写
    //        result = [str compare:str2 options:NSCaseInsensitiveSearch];
    
    //按照字符的个数进行比较
    NSComparisonResult result = [str compare:str2 options:NSNumericSearch];
    
    switch (result) {
        case NSOrderedAscending:
            NSLog(@"str < str2");
            break;
        case NSOrderedSame:
            NSLog(@"str == str2");
            break;
        case NSOrderedDescending:
            NSLog(@"str > str2");
            break;
            
        default:
            break;
    }
    
    //OC中字符串比较的时候,可以加条件  区分大小写  字符的个数
  }

2. NSString前后缀检查及搜索


void test(){

    NSString *url = @"http://asdfasdfasdfaasdfadsfaf";
    
    //判断这个地址,是否是一个网址
    //1、 hasPerfix  检查字符串是否以另外一个字符串开头
    
    if([url hasPrefix:@"http://"]){
        
        NSLog(@"这是一个网址");
        
    }else{
        
        NSLog(@"这不是一个网址");
        
    }
    
    
    //2、检查后缀
    // 需求,检查是否是一张图片   jpg   png  jpeg
    // 先检是否是一个png的图片
    NSString *str = @"logo.txt";  //logopng
    if([str hasSuffix:@".png"]||[str hasSuffix:@".jpg"]||[str hasSuffix:@".jpeg"]){
        
        NSLog(@"是图片");
        
    }else {
        
        NSLog(@"不是图片");
        
    }
    
    
     //字符串的查找
        NSString *str = @"asitxcastdfafsadfxyz asdfasdfsadfa sadf";
        
        // rangeOfString 作用是查找子字符串itcast在 str中第一次出现的位置
        // 如果找能够查找到字符串,则返回子字符串的位置信息
        // 如果查找不到,则返回的Range
        //                       位置 是一个特别大得数
        //                       length 0
        NSRange range = [str rangeOfString:@"itcast"];
        
        //NSNotFound 是一个最大的long 无符号数
        //如果查找不到 range.location 是一个最大的long 无符号数
        if (range.location != NSNotFound) {
             NSLog(@"位置:%ld,长度:%ld",range.location,range.length);
        }else{
        
            NSLog(@"没有查找到");
        }



}

3. NSRange 的使用


/*
  NSRange 是一个结构体
  用来表示范围
  有两个成员变量: location 表示范围的起始位置  length 表示范围的长度
 
  NSRange的几种创建方式:
 
  1)直接赋值
  
   NSRange range1 = {2,5};
 
  2)先定义后赋值
 
   NSrange range2;
   range2.location = 1;
   range2.length = 23;
 */
 
  //1)直接赋值
        
        NSRange range1 = {2,5};
        NSLog(@"loc = %ld,len = %ld",range1.location,range1.length);
        
  //2)先定义后赋值
        
        NSRange range2;
        range2.location = 1;
        range2.length = 23;
        NSLog(@"loc = %ld,len = %ld",range2.location,range2.length);
        
        //3)使用NSMakeRange创建一个NSRange类型的变量
        NSRange range3 = NSMakeRange(45, 3);
        NSLog(@"loc = %ld,len = %ld",range3.location,range3.length);
 

4. 字符串的截取和替换

void test(){

    NSString *str = @"aaaaaaabbbbbbbccccccdddddd";
    
    //从指定的位置出开始(包含此位置),到最后
    //substringFromIndex
    NSString *newStr = [str substringFromIndex:7];
    
    
    //从起始位置开始,到指定位置(不包含指定位置)结束
    newStr = [str substringToIndex:5];
    
    //截取指定范围的字符串
    NSString *dateStr = @"2015-01-29 12:12:30";
    //获取日期
    NSRange range = {0,10};
    
    //获取时间
    range = NSMakeRange(11, 8);
    
    //获取指定范围的字符串
    newStr = [dateStr substringWithRange:range];
    
    NSLog(@"%@",newStr);

}


void test2(){

    
    NSString *str = @"<imufeng>沐风科技</imufeng>";
    
    unsigned long loc = [str rangeOfString:@">"].location+1;
    unsigned long len = [str rangeOfString:@"</"].location - loc;
    
    NSLog(@"%ld,%ld",loc,len);
    
    NSRange range = {loc,len};
    
    NSString *newStr = [str substringWithRange:range];
    
    NSLog(@"newStr = %@",newStr);

}


void test3(){

//把imufeng  -->  ios
        NSString *str = @"<imufeng>沐风科技</imufeng>";
        //在str中 将所有的 imufeng 都替换成 ios
        //str stringByReplacingOccurrencesOfString:@"imufeng" withString:@"ios"
        
        NSString *newStr = [str stringByReplacingOccurrencesOfString:@"imufeng" withString:@"ios"];
        
        
        
        //将http:**ios.imufeng.cn*ios*images*content_25.jpg中的*替换为/
        str = @"http:**ios.imufeng.cn*ios*images*content_25.jpg";
        newStr = [str stringByReplacingOccurrencesOfString:@"*" withString:@"/"];
        
        
        //"  http:**  ios.imufeng.cn  *ios*images*  content_25.jpg " 的空格去掉,并且将*替换为/
        str= @"  http:**  ios.imufeng.cn  *ios*images*  content_25.jpg ";
        
        //先替换空格 空
        str = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
        
        newStr = [str stringByReplacingOccurrencesOfString:@"*" withString:@"/"];
        
        NSLog(@"%@",newStr);

}


5. 字符串的其他用法


/**
 *  取出每一个字符
 */
void test1(){

    
    NSString *str = @"ios.itcast.cn";
    
    //1、获取字符串的长度
    //调用字符串的length方法
    //str.length  ---->  [str length];
    NSLog(@"%ld",str.length);
    
    //2、获取字符的每一个字符
    unsigned long len = str.length;
    
    for (int i=0; i<len; i++) {
        unichar c = [str characterAtIndex:i];
        printf("%c  ",c);
    }
   
}


/**
 *  字符串的转换问题
 */
void test2(){

    int a = 23;
    //把整形数据包装成字符串了
    NSString *s0 = [NSString stringWithFormat:@"%d",a];
    
    //字符串和基本数据类型转换问题
    NSString *s1 = @"12";    //12+2
    //        s1+2;
    NSString *s2 = @"2.3";
    NSString *s3 = @"345.678";
    
    //把字符串转换为 int类型
    int n1 = [s1 intValue];
    NSLog(@"n1 = %d",n1*34);
    
    //字符串转换为float
    float f1 = [s2 floatValue];
    NSLog(@"f1 = %f",f1+3);
    
    //把字符串转换为double类型
    double d1 = [s3 doubleValue];
    NSLog(@"d1 = %f",d1+3);
    
    //把OC的字符串对象转换为C语言的字符串
    //@"xxxx"  %@      "xxxxx"  %s
    
    NSString *s4 = @"helloworld";
    const char *ss = [s4 UTF8String];
    
    printf("%s\n",ss);
    
    //把c的字符串转换为OC字符串对象
    char ch[]="itcast";
    NSString *ocStr = [NSString stringWithUTF8String:ch];
    NSLog(@"%@",ocStr);

}


void test3(){

        NSString *str = @" itc ast ";
   
        //1、去除字符串首尾的空格
        NSCharacterSet *set =[NSCharacterSet whitespaceCharacterSet];
        NSString *newStr = [str stringByTrimmingCharactersInSet:set];
        
        str= @"IOSitAcastIT";
        //2、取出字符串的首尾大写字符
        newStr  = [str stringByTrimmingCharactersInSet:[NSCharacterSet uppercaseLetterCharacterSet]];
        
        
        
        NSLog(@"-----%@-----",newStr);

}


6. NSMutableString


void test1(){

        //不可变的字符串
        NSString *str = @"Jack";
        str = @"Rose";
        //截取
        NSString *newStr = [str substringToIndex:2];
        NSLog(@"%@",newStr);
        
        
        //可变字符串
        //创建一个空字符串
        NSMutableString *str2 = [NSMutableString string];
        //给字符串追加内容
        [str2 appendString:@"welcome"];
        [str2 appendString:@" to"];
        [str2 appendString:@" itcast!"];
        
        NSLog(@"%@",str2);

}

/**
 *  可变字符串的常用的方法
 */
void test2(){

    //定义一个可变的字符串
    //NSString  不可变
    //NSMutableString 可变
    NSMutableString *str = [NSMutableString string];
    //追加字符串
    [str appendString:@"xxxxx"];
    
    int a = 10;
    float f1 = 3.14;
    char ch = 'x';
    NSString *it = @"imufeng";
    
    //格式化的追加字符串
    [str appendFormat:@" a = %d, f1 = %.2f,ch = %c --->%@",a,f1,ch,it];
    
    NSRange range = {5,5};
    //删除指定范围的字符串
    [str deleteCharactersInRange:range];
    
    
    //增加字符串@“ios”到str字符串中
    [str insertString:@"ios" atIndex:5];
    
    //替换字符串
    [str replaceCharactersInRange:range withString:@"zzzzz"];
    
    //先查找再替换
    //imufeng  iosios
    //                 查找字符串
    NSRange range2 = [str rangeOfString:@"imufeng"];
    //                 替换字符串
    [str replaceCharactersInRange:range2 withString:@"iosios"];
    
    
    NSLog(@"%@",str);

}

-(void)test3(){

        //可变字符串易犯的错误
        //1、给可变字符串赋值了常量
        NSMutableString *str = @"xxxxx";
        // [str appendString:@"imufeng"];
        
        NSMutableString *str2 = [NSMutableString string];
        [str2 appendString:@"imufeng"];
        //2、通过string的属性,可以修改字符串的内容
        str2.string = @"xxxxxx";
        
        // str2 rangeOfString:<#(NSString *)#> options:0
        NSLog(@"%@",str2);
      
}


7. NSArray 的介绍和基本使用


-(void)test {

        //NSArray是OC中的数组类
        //1、创建NSArray的方法
        /*
         
         + (instancetype)array;
         + (instancetype)arrayWithObject:(id)anObject;
         + (instancetype)arrayWithObjects:(id)firstObj, ...;
         + (instancetype)arrayWithArray:(NSArray *)array;
         + (id)arrayWithContentsOfFile:(NSString *)path; // 读取一个xml文件.
         + (id)arrayWithContentsOfURL:(NSURL *)url; // 读取一个xml文件.

         */
        //数组的最后一个值,我们默认的初始化为nil,nil表示数组结束了
        NSArray *array1 = [NSArray arrayWithObjects:@"1",@"2",nil,@"3",nil];
        
        //使用一个已经存在的数组,创建另外一个数组
        NSArray *arr2 = [NSArray arrayWithArray:array1];
        
        
        NSLog(@"%@,%@",array1,arr2);
        
        NSArray *arr3 = [[NSArray alloc] initWithObjects:@"one",@"two",@"four", nil];
        
        // NSLog(@"%@",array1[2]);
        NSLog(@"%@",arr3);
        
        //创建一个空数组
        NSArray *arr4 = [NSArray array];
        NSLog(@"%@",arr4);
}


8. NSArray 读写文件


void test(){

    //定义一个数组
    NSArray *arr = @[@"1",@"2",@"3",@"4",@"5",@"six",@"seven",@"8"];
    
    //把数组的内容保存到文件中
    //1)路径     2)原子性     3)编码      4)错误
    // writeToFile
    // .plist 是一个什么文件,它使一个资源文件
    BOOL isSuccess = [arr writeToFile:@"/Users/apple/Desktop/arr.xml" atomically:YES];
    if (isSuccess) {
        NSLog(@"写入成功!");
    }


}
 
// 2、从文件中读取数据,并且放到数组中
-(void)test2(){

        // 1)路径      2)类方法
        NSArray *arr2 = [NSArray arrayWithContentsOfFile:@"/Users/apple/Desktop/arr.xml"];
        
        NSLog(@"arr2 = %@",arr2);

}



9. NSArray 与字符串


/**
 *  把数组元素连接成一个字符串
 */
void test(){

    //定义一个数组
    NSArray *arr = @[@"1",@"2",@"3",@"4",@"5",@"six",@"seven",@"8"];
    
    //componentsJoinedByString 方法的作用是把数组元素连成一个字符串
    //连接字符串的时候,还可以指定元素和元素之间的分隔符
    NSString *str = [arr componentsJoinedByString:@"-"];
    
    NSLog(@"%@",str);
}



void test2(){

        //@"400-517-517"
        NSString *tel = @"400-517-517";
        //componentsSeparatedByString
        //把tel这个字符串 ,用 - 做分隔
        //把分隔后的每一部分存放到数组中
        
        NSArray *arr = [tel componentsSeparatedByString:@"-"];
        
        NSLog(@"%@",arr);
}



10. NSMutableArray及基本使用


-(void)test{

        //NSMutableArray 创建方法
        
        //********** 数组的创建方法 ************
        //1、可以创建空数组
        NSMutableArray *arr = [NSMutableArray array];
        //定义一个长度为5的数组
        NSMutableArray *arr2 = [[NSMutableArray alloc] initWithCapacity:5];
        //2、可以调用类方法,创建数组
        NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"1",@"two",@"3", nil];
        //3、可以调用对象方法,创建数组
        NSMutableArray *arr4 = [[NSMutableArray alloc] initWithObjects:@"1",@"3", nil];
        
        
        NSArray *array = @[@"1",@"10",@"100",@"1000"];
        //********* 数组的使用 ***********
        // 1、可以向数组添加元素
        [arr addObject:@"one"];
        [arr addObject:@"one"];
        [arr addObject:@"one"];
        [arr addObject:@"one"];
        
        // 把另外一个数组,整体添加到数组中
        [arr2 addObjectsFromArray:array];
        
        // 2、计算数组的长度
        NSUInteger len = arr.count;
        
        // 3、插入一个元素在指定的位置
        [arr insertObject:@"1" atIndex:2];
        
        // 4、删除最后一个元素
        [arr removeLastObject];   //删除最后一个元素
        [arr removeObject:@"1"];  //删除指定元素
        
        // 5、替换元素
        //[arr replaceObjectAtIndex:1 withObject:@"two"];
        arr[1] = @"two";
        
        // 6、交换元素
        [arr exchangeObjectAtIndex:0 withObjectAtIndex:1];
        
        
        //NSMutableArray 错误用法
        // NSMutableArray *arr8 = @[@"one",@"two"];
        // [arr8 addObject:@"three"];
        
        NSLog(@"len = %ld",len);
        NSLog(@"%@",arr);


}


12. NSDictionary的介绍及使用


/**
 *  字典的创建方法
 */
void test(){

    //NSDictionary 字典
    //NSArray     @"1"  @“2”
    
    //字典的结构
    // 键值对
    // key(键)   value(实际的值)
    // zs             张三
    // ls             李四
    
    //创建字典
    //1、使用类方法创建字典
    //   字典初始化后,内部是无序的
    NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"zhangsan",@"zs",@"lisi",@"ls", nil];
    
    NSDictionary *dict2 = [[NSDictionary alloc] initWithObjectsAndKeys:@"zhangsan",@"key1",@"lisi",@"key2", nil];
    
    NSLog(@"%@",dict2);
    //获取字典的长度
    NSLog(@"%ld",dict2.count);
    
    //2、快速创建字典  @{key:value,key1:value1}
    // 在字典中,key值是不能够重复的,重复的时候不会报错
    // 重复的只保留一个(第一次出现的那个)
    NSDictionary *dict3 = @{@"zs":@"zhangsan",@"ls":@"lisi",@"zs":@"fengjie"};
    NSLog(@"%@",dict3);

}

/**
 *  NSDictionary 基本使用
 */
void test2(){

    //字典长度 ?
    // 2   -- @"zs":@"fengjie"  没有被添加到字典中,原因是key值重复了
    NSDictionary *dict3 = @{@"zs":@"zhangsan",@"ls":@"lisi",@"zs":@"fengjie"};
    //1) 获取字典长度(键值对的个数)
    NSLog(@"%ld",dict3.count);
    NSLog(@"%@",dict3);
    
    //2)根据key获取 value 只获取zs
    NSString *s = [dict3 objectForKey:@"zs"];
    NSLog(@"%@",s);


}


-(void)test3(){

         NSArray *arr = @[@"1",@"2"];
         NSDictionary *dict3 = @{@"zs":@"zhangsan",@"ls":@"lisi",@"arr":@"fengjie"};
        //1、关于字典的遍历问题
        //for(int i=0;i<dict3.count;i++){
        
            //根据key  --->  value
        
        //}
        
        //2、使用增强型for 循环可以遍历
        // str 存放的 key    还是 value
        // 通过这种方式,得到的是字典的key值
        //        for (NSString *str in dict3) {
        //            // 得到的事key
        //            NSString *ss = [dict3 objectForKey:str];
        //            NSLog(@"%@ ---> %@",str,ss);
        //        }

        // 3、使用block 进行遍历
        // key  就是我们键值对 key值
        // obj  就是我们key 对应的 value值
        
        [dict3 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
            
            NSLog(@"%@--->%@",key,obj);
        }];

}

13. NSDictionary的简写及文件操作


/**
 *  Dictionary的简写形式
 */
void test(){

    //创建字典的简写形式
    NSDictionary *dict3 = @{@"zs":@"zhangsan",@"ls":@"lisi",@"arr":@"fengjie"};
    
    //获取value值得简写形式
    NSLog(@"%@",dict3[@"arr"]);

}


-(void)test2(){

//NSDictionary的文件操作
        
        NSArray *arr = @[@"1",@"2",@"one"];
        
        NSDictionary *dict = @{@"1":@"one",@"2":@"two"};
        //1、把字典的内容写入到文件中
        //   writeToFile
        NSDictionary *dict3 = @{@"zs":@"zhangsan",@"dict":dict,@"arr":arr};
        //把字典写入到文件中
       BOOL flag = [dict3 writeToFile:@"/Users/apple/Desktop/dict.plist" atomically:YES];
        if (flag) {
            NSLog(@"写入成功!");
        }
        
        //2、从文件中读取数据,放到字典中
        // 给一个路径
        NSDictionary *dict4 = [NSDictionary dictionaryWithContentsOfFile:@"/Users/apple/Desktop/dict.plist"];
        
        //获取字典中的数组
        NSArray *arr2 = dict4[@"arr"];
        NSLog(@"%@",arr2);
        
        //获取字典中的字典
        NSDictionary *dict5 = dict4[@"dict"];
        NSLog(@"%@",dict5);

}

14.NSMutableDictionary介绍和使用

-(void)test(){

        //创建可变NSMutableDictionary
        // 创建一个空的字典
        NSMutableDictionary *dict1 = [NSMutableDictionary dictionary];
        // 使用类方法创建一个字典
        NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2", nil];
        
        //2、可变字典的常见方法
        //1) 添加元素
        //给他设置值
        //如果添加一个值,实际上是添加一组键值对
        
        [dict1 setObject:@"one" forKey:@"1"];
        [dict1 setObject:@"two" forKey:@"2"];
        [dict1 setObject:@"three" forKey:@"3"];
        [dict1 setObject:@"four" forKey:@"4"];
        
        //使用dictionary 给字典重新赋值
        dict1.dictionary =@{@"zs":@"zhangsan"};
        dict1[@"1"] = @"one";
        dict1[@"2"] = @"one2";
        dict1[@"3"] = @"one3";
        dict1[@"4"] = @"one4";
        
        //2) 删除元素
        [dict1 removeObjectForKey:@"3"];
        
        //3)  删除所有元素
        //        [dict1 removeAllObjects];
        
        NSLog(@"%@",dict1);
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容