Object c的字符串,数组和字典的笔记

来源:互联网 发布:linux more 向前翻页 编辑:程序博客网 时间:2024/05/28 17:04

////  main.m//  GuoQingSecondDayString////  Created by 千雅爸爸 on 16/10/2.//  Copyright © 2016年 kodulf. All rights reserved.////可变字符串和不可变字符串//不可变字符串的NSString//0:创建//1:格式化//2:评介//3:分隔//4:获取子字符串//5:字符串比较//6:字符串长度//7:以什么开始//8:以什么结尾//9:大写//////和java的区别//可变数组相当于java中的ArrayList,可变字典相当于java中的hashmap//        0:不可变字符串的创建//        不可变字符串指的是字符和长度不可变。但是地址是可变的。//        可以直接创建NSString *string = @"string";//        也可以通过[NSString stringWithFormat:@"%@", @"hello"];//        string = @"bb";//        NSString newString = @"bb";//        这个时候string 和newString的地址是一样的//        这个和java一样//2:拼接,java直接使用+的符号,oc有三种方法,//第一种是使用格式化的方法//第二种是stringByAppendingString//第三种是stringByAppendingFormat//5:字符串比较//和java一样的==比较的是地址,//正式的判断两个字符的值是否相等的是 if([stringcompare1 compare:stringcompare2] == NSOrderedSame)//其他的属性例如,以什么开始,hasprefix,以什么结束hassuffix,长度,大写都和java很类似的。//数组的获取某个位置上面的值的方法可以和java一样array[0]这样,也可以是[nsarray2 objectAtIndex:0]//注意方法有多个参数的时候,中间不要逗号隔开,这个和java有区别//+(instancetype)initPersonWithName:(NSString *)name age:(NSUInteger)mage;//0:不可变的字典的创建,一定要注意的是使用dictionaryWithObjectsAndKeys这个创建的时候是value key的形式来添加的和java不一样,但是使用最简方式创建的时候就是和java一样的,key value的形式,其实可以看上面的方法的名字也就明白了// 获取指定的值,可以dic[@"key"]这个来做//不可变字典可以获取对应value的key,java中没有这种方法。//NSDictionary *dic5 = @{@"key1":@"value2",@"key2":@"value2"};//NSArray *allkeysForOneValueArray = [dic5 allKeysForObject:@"value2"];//NSLog(@"所有的value是value2的key:%@",allkeysForOneValueArray);#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        //        0:不可变字符串的创建//        不可变字符串指的是字符和长度不可变。但是地址是可变的。//        可以直接创建NSString *string = @"string";//        也可以通过[NSString stringWithFormat:@"%@", @"hello"];//        string = @"bb";//        NSString newString = @"bb";//        这个时候string 和newString的地址是一样的//        这个和java一样        NSLog(@"0:创建");        NSString *string = @"hello";        NSLog(@"创建第一个string%@ string=",string);        NSString *secondString = @"hello";        NSLog(@"使用直接的方法创建第二个String second=String%@",secondString);                //判断地址是否一样        if(string == secondString){            NSLog(@"string secondString 的地址相同");        }else{            NSLog(@"string secondString 的地址不相同");                    }        //使用stringWithFormat        NSString *thirdString = [NSString stringWithFormat:@"%@", @"hello"];        NSLog(@"使用stringWithFormat 方法创建第三个string=%@",thirdString);                                //可以将c语言字符串变成我们的oc字符串        [NSString stringWithFormat:@"%@", @"hello"];        const char *cstring = "hello c program";        //通过类方法        NSString *formatedCstring = [NSString stringWithCString:cstring encoding:NSUTF8StringEncoding];        NSLog(@"通过类方法,使用stringWithCString的方法来做的 c语言字符串=%@",formatedCstring);                //通过[NSString alloc] initWithCString方法        NSString *cString2=[[NSString alloc] initWithCString:cstring encoding:NSUTF8StringEncoding];        NSLog(@"通过实例方法,使用[NSString alloc] initWithCString的方法来做的 c语言字符串=%@",cString2);                //1:格式化        NSString *formatedString = [NSString stringWithFormat:@"%@",@"格式化输出"];        NSLog(@"%@",formatedString);                //2:拼接,java直接使用+的符号,oc有三种方法,        //第一种是使用格式化的方法        //第二种是stringByAppendingString        //第三种是stringByAppendingFormat        NSString *appendTestString =[NSString stringWithFormat:@"%@",@"字符串拼接"];        NSString *afterAppend = [appendTestString stringByAppendingString:@" stringByAppendingString方法的字符串"];        NSLog(@"%@",afterAppend);        NSString *afterAppend2 = [appendTestString stringByAppendingFormat:@"stringByAppendingFormat %@ %@",@"格式化1",@"格式化二"];        NSLog(@"%@",afterAppend2);                //3:分隔,分为单个分隔和多个分隔        NSString *webaddress =@"I love you";        NSArray *array = [webaddress componentsSeparatedByString:@" "];        NSLog(@"以空格来分隔后,分割后的字符串:%@",array);        NSString *newWebAddress = [webaddress stringByAppendingString:@" . www.baidu.com"];        //多个分隔符,需要用到NSCharacterSet的类方法来获取set,        NSArray *newarray = [newWebAddress componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" ." ]];        NSLog(@"以空格和点来分隔后,分割后的字符串:%@",newarray);                //4:获取子字符串        NSString *subString =[webaddress substringFromIndex:1];        NSLog(@"从第一个元素往后的字符串%@",subString);        NSString *subString2 = [webaddress substringToIndex:6];        NSLog(@"从第六个元素之前的字符串%@",subString2);        //注意这里的NSMakeRange,这个java 里面也有,但是是直接使用某个区间的,而不用单独的一个变量        NSString *subString3 = [webaddress substringWithRange:NSMakeRange(0,5)];        NSLog(@"使用substringWithRange:NSMakeRange(0,5) 来获取的子字符串=%@",subString3);                //5:字符串比较        //和java一样的==比较的是地址,        NSString *stringcompare1 = @"hello world";        NSString *stringcompare2 = @"hello world";        if(stringcompare1 == stringcompare2){            NSLog(@"相等");        }                NSString *stringCompare3 = [NSString stringWithFormat:@"hello world two"];        NSString *stringCompare4 = [NSString stringWithFormat:@"hello world"];                NSComparisonResult result = [stringCompare3 compare:stringcompare1];        switch(result){            case NSOrderedAscending:                NSLog(@"升序");                break;                            case NSOrderedDescending:                NSLog(@"降序");                break;            case NSOrderedSame:                NSLog(@"相等");                break;        }        //上面缩减为        if([stringcompare1 compare:stringcompare2] == NSOrderedSame){            NSLog(@"相等");        }                //6:字符串长度        NSLog(@"字符串长度=%lu",(unsigned long)[stringcompare2 length]);                //7:以什么开始,和java的startwith一样                BOOL b  = [stringcompare2 hasPrefix:@"hello"];        if(b == true){            NSLog(@"是以hello 开头的");        }else{            NSLog(@"不是以hello 开头的");        }                //8:以什么结尾        BOOL a = [stringcompare2 hasSuffix:@"world"];        if(a == true){            NSLog(@"是以world 结尾的");        }else{            NSLog(@"不是以world 结尾的");        }        //9:大写        NSString *upperString = [stringcompare2 uppercaseString];        NSLog(@"大写的=%@",upperString);                //10, 查看字符串中的子的字符串的位置        NSRange range = [stringcompare2 rangeOfString:@"world"];        NSLog(@"world 在里面的位置%lui",(unsigned long)range.length);        //不可以直接输出:NSLog(@"%@",range);        if (range.length > 0)            NSLog(@"Range is: %@", NSStringFromRange(range));                //可变字符串,就相当于是java的stringbuilder        //需要注意的是这个可变的字符串是不可以使用@“”来直接赋值的        //NSString 不可以直接使用alloc init ,NSMutableString是可以的        NSMutableString *mString = [[NSMutableString alloc]initWithCapacity:40];        [mString setString:@"可变字符串"];        NSLog(@"%@",mString);        //注意setString不能使用nil,如果使用了,那么就会报错Thread 1:signal SIGABRT        //[mString setString:nil];        //NSLog(@"%@",mString);                //追加字符串        [mString appendString:@"追加的字符串啦啦啦啦"];        NSLog(@"%@",mString);                //在某个位置插入字符串,从0开始算        [mString insertString:@"在第一位置插入" atIndex:0];        NSLog(@"%@",mString);                //删除某一部分的,        //PS创建NSRange NSRange range2 = NSMakeRange(10, 2);        //输出NSRange,NSLog(@"Range is: %@", NSStringFromRange(range));        NSRange range2 = NSMakeRange(0, 10);        [mString deleteCharactersInRange:range2];        NSLog(@"%@",mString);                //替换        NSRange range3 = NSMakeRange(0,2);        [mString replaceCharactersInRange:range3 withString:@"替换后的文字,哈哈哈哈"];        NSLog(@"%@",mString);                        //++++++++++++数组+++++++++++++++++        //不可变数组,可变数组相当于java中的arraylist        //oc中有序集合是数组,无序集合是字典,set        //不可变数组的不可变,指的是数组的个数和类型不可变        //0:创建,        //1:指定位置的获取        //2:遍历        //3:枚举        //4:排序        //5:首尾的访问        //6:数组的拼接        //7:可变数组的创建        //8:可变数组的晴空        //9:可变数组的替换                //0:创建,可以有3种方法,        //第一种:        NSArray *nsarray = [[NSArray alloc] initWithObjects:@"a",@"b",@"c", nil];        NSLog(@"%@",nsarray);        //第二种:最简化方式,注意这里不需要nil的,系统会自动的添加nil        NSArray *nsarray2 = @[@"1",@"2",@"3"];        NSLog(@"%@",nsarray2);        //第三种:arrayWithObject        NSArray *nsarray3 = [NSArray arrayWithObjects:@"4", nil];        NSLog(@"%@",nsarray3);                //1:获取数组种某个位置的值        //如果这个类型已经知道了,那么就该类型,如果不知道就用范型id        NSString *firstString =[nsarray2 objectAtIndex:0];        NSLog(@"数组的第一个值:%@",firstString);        id object = [nsarray2 objectAtIndex:0];        NSLog(@"不知道类型的情况下的数组的第一个值:%@",object);        //获取数组某个位置值的第二种方法,和java一样数组名加上[]        NSString *firstStringsecond = nsarray2[0];        NSLog(@"使用array[]的方式获取的数组的第一个%@",firstStringsecond);                //2:遍历        //使用两种方法:第一种for 循环,第二种是forin循环        NSArray *bianliarray = @[@"啊",@"宝",@"长"];//这里使用最简化方式        for (NSInteger i = 0; i<bianliarray.count; i++) {            NSLog(@"数组的第%ld个元素是%@",(long)i,bianliarray[i]);        }                for (NSString *object in bianliarray) {            NSLog(@"forin循环遍历的元素:%@",object);        }                //3:枚举        NSArray *meijuarray = @[@"枚举0",@"枚举1",@"枚举2"];        NSEnumerator *emuator = [meijuarray objectEnumerator];        NSObject *enumobject = emuator.nextObject;        while (enumobject) {            NSLog(@"枚举的元素:%@",enumobject);            enumobject = emuator.nextObject;        }                //4:排序,有三种方法        NSArray *paixuarray = @[@"azc",@"abd",@"acd",@"abc"];        NSArray *paixuhouarray = [paixuarray sortedArrayUsingSelector:@selector(compare:)];//compare就是值得字符串比较方法        NSLog(@"排序后的数组:%@",paixuhouarray);        //自定义对象的排序        //首先创建一个自定义的对象person        Person *person1 = [Person initPersonWithName:@"test name 2" age:12];        Person *person2 = [Person initPersonWithName:@"test name 1" age:13];        Person *person3 = [Person initPersonWithName:@"test name 2" age:11];                NSArray *zidingyiarray = @[person1,person2,person3];        //下面的selector 里面使用的是我们的Person里面的        NSArray *zidingyiarrayupdate = [zidingyiarray sortedArrayUsingSelector:@selector(comparePerson:)];        NSLog(@"自动更新后的%@",zidingyiarrayupdate);        //第二种方法排序,使用descript来排序        //https://my.oschina.net/pengloo53/blog/173810        //把排序描述器放进数组里,放入的顺序就是你想要排序的顺序                NSSortDescriptor *description1 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:true];        NSSortDescriptor *description2 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:true];        NSArray *descriptionArray = [NSArray arrayWithObjects:description1,description2,nil];        NSArray *afterdescriptionsorted = [zidingyiarray sortedArrayUsingDescriptors:descriptionArray];                    NSLog(@"%@",afterdescriptionsorted);                //5:首尾的访问        NSArray *getFirstEndArray= @[@"first",@"second",@"end"];        NSString *firststring = [getFirstEndArray firstObject];        NSString *endstring = [getFirstEndArray lastObject];        NSLog(@"第一个数据是%@ 最后一个数据是%@",firststring,endstring);        //6:数组的拼接        NSString *iloveu = @"i love u";        NSArray *seperatedArray = [iloveu componentsSeparatedByString:@" "];        NSLog(@"分隔后的string%@",seperatedArray);        NSString *afterJoinString = [seperatedArray componentsJoinedByString:@"+"];        NSLog(@"拼接后的字符串%@" ,afterJoinString);                //7:可变数组的创建以及添加元素,相当于arraylist        NSMutableArray *mArray = [NSMutableArray arrayWithObjects:@"A",@"B",@"C", nil];        NSLog(@"添加前的%@",mArray);        [mArray addObject:@"D"];        NSLog(@"添加后的%@",mArray);        [mArray insertObject:@"insert in the second" atIndex:1];        NSLog(@"指定位置添加后的%@",mArray);        [mArray removeObjectAtIndex:1];        NSLog(@"移除指定位置上的元素后%@",mArray);        for (NSInteger i=0; i<5; i++) {            [mArray addObject:@"add"];        }        NSLog(@"新增5个add以后的%@",mArray);        //如果是removeObject的话会把所有的add都删除        [mArray removeObject:@"add"];        NSLog(@"removerobject add以后的%@",mArray);        //8:可变数组的晴空        [mArray removeAllObjects];        NSLog(@"removeallobject 以后的%@",mArray);        //9:可变数组的替换        NSMutableArray *replaceArray = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",nil];        [replaceArray replaceObjectAtIndex:0 withObject:@"ddddd"];        NSLog(@"替换了第一个a换成dddd 以后的%@",replaceArray);        //不可变字典,相当于java中的haspmap                //++++++++++++++++++++++++++字典+++++++++++++++        //可变字典和不可变字典        //0:创建        //1:获取对应key的value        //2:获取对应value的key        //3:字典的嵌套使用        //4:字典的便利        //5:可变长字典的创建        //6:添加        //7:修改相应的key 对应的value        //8:删除指定的key 对应的value,全删                //0:不可变的字典的创建,一定要注意的是使用dictionaryWithObjectsAndKeys这个创建的时候是value key的形式来添加的和java不一样,但是使用最简方式创建的时候就是和java一样的,key value的形式,其实可以看上面的方法的名字也就明白了        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2" ,@"key2", nil];        NSLog(@"输出的字典:%@",dic);        //最简方式创建的        NSDictionary *dic2 = @{@"key3":@"value3",@"key4":@"value4"};        NSLog(@"输出的字典:%@",dic2);        //如果有数组,需要首先转化为NSNumber的类型,使用数字前面加上@的方式        NSDictionary *dic3 = @{@"numb1":@1,@"numb2":@2};        NSLog(@"输出的字典:%@",dic3);        //如果两个key 有相同的名字,那么后面的会被忽略        NSDictionary *dic4 = @{@"numb1":@1,@"numb2":@2,@"numb2":@3};        NSLog(@"输出的字典:%@",dic4);        //1:获取对应key的value        NSNumber *num2 = [dic4 valueForKey:@"numb2"];        NSLog(@"num2的值是%@",num2);        NSString *numb1Value =dic4[@"numb1"];        NSLog(@"numb1的值%@",numb1Value);        //查看所有的value 和所有的key        NSArray *allValues = [dic4 allValues];        NSArray *allKeys = [dic4 allKeys];        NSLog(@"所有的key:%@\n 所有的value:%@",allKeys,allValues);        //2:不可变字典可以获取对应value的key,java中没有这种方法。        NSDictionary *dic5 = @{@"key1":@"value2",@"key2":@"value2"};        NSArray *allkeysForOneValueArray = [dic5 allKeysForObject:@"value2"];        NSLog(@"所有的value是value2的key:%@",allkeysForOneValueArray);        //3:字典的嵌套使用        NSDictionary *dic6 = @{@"dic1":dic,@"dic4":dic4};        NSLog(@"复合以后的dic6=%@",dic6);        //4:字典的遍历        for (id object in [dic6 allKeys]) {            NSLog(@"forin 循环%@",dic6[object]);        }        //5:可变长字典的创建        NSMutableDictionary *mDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"changeable value",@"changeable key", nil];        NSLog(@"可变字典:%@",mDic);        //6:添加        [mDic addEntriesFromDictionary:dic4];        NSLog(@"从其他的不可变字典添加后的可变字典:%@",mDic);        //新增直接使用setObject来弄,这个setObject还可以用来修改        [mDic setObject:@"bianbianbian" forKey:@"bianbianbian"];        NSLog(@"新增变变变:%@",mDic);        //7:修改相应的key 对应的value,注意前后顺序        [mDic setObject:@"meihaodeshiqingjijiangfasheng" forKey:@"bianbianbian"];        NSLog(@"修改了以后的bianbianbian=%@",mDic);                //8:删除指定的key 对应的value,全删        [mDic removeObjectForKey:@"bianbianbian"];        NSLog(@"删除了变变变以后的%@",mDic);            }    return 0;}


用到了一个person类:

h文件:

////  Person.h//  GuoQingSecondDayString////  Created by 千雅爸爸 on 16/10/4.//  Copyright © 2016年 kodulf. All rights reserved.//#import <Foundation/Foundation.h>@interface Person : NSObject//注意方法有多个参数的时候,中间不要逗号隔开,这个和java有区别+(instancetype)initPersonWithName:(NSString *)name age:(NSUInteger)mage;@property(nonatomic,copy) NSString *name;@property(nonatomic,assign) NSUInteger age;-(NSComparisonResult)comparePerson:(Person *)person;@end

m文件:

////  Person.m//  GuoQingSecondDayString////  Created by 千雅爸爸 on 16/10/4.//  Copyright © 2016年 kodulf. All rights reserved.//#import "Person.h"@implementation Person+(instancetype)initPersonWithName:(NSString *)name age:(NSUInteger)mage{    Person *person = [[self alloc]init];    person.age = mage;    person.name = name;    return person;}-(NSComparisonResult)comparePerson:(Person *)person{    NSComparisonResult result = [self.name compare:person.name];    return result;}- (NSString *)description{    return [NSString stringWithFormat:@"name %@,age %ld", self.name,self.age];}@end



0 0
原创粉丝点击