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
- Object c的字符串,数组和字典的笔记
- [Object-c] Log(输出数组和字典的中文内容)
- Object-C数组和字典
- Object C 字符串、数组、字典集合 NSString NSArray NSDictionary操作
- Object-C 数组 字典 集合
- Objective - C 字符串 数组 字典 集合的基本使用
- 数组 字典 字符串 笔记
- 字符串、数组和字典的赋值和复制
- Object-C--->Swift之(五)数组和字典
- Object-c 中字符串与数组的处理
- Object-c 中字符串与数组的处理
- Object-c 中字符串与数组的处理
- Object-c 中字符串与数组的处理
- 字典、数组和json字符串的相互转化
- swift字符串,数组,字典和集合的遍历
- Object-c-数组的使用
- Swift学习笔记(12)--数组和字典的复制
- OC的字符串 数组 字典 集合
- 7天入门php-类与对象
- 第六周--排队看病模拟
- 2016.10.6NOIPA组总结
- Android 存储首选项SharedPreferences
- MySQL基础篇--语法
- Object c的字符串,数组和字典的笔记
- 【C++心路历程4】vector切记需要注意size
- easyui实现datagrid打印
- Java并发之synchronized的解析
- 设计模式之 模板设计模式(demo)
- 利用返回参数创建慢二叉树
- 百度地图API简单应用——1.根据地址查询经纬度
- C#面向对象(二)继承和组合
- CSS 検索条件