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

//
//  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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值