OC字符串和数组

本文主要介绍 Objective-C 中 NSSting \ NSMutableString \NSArray  的常用方法

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
#pragma mark 不可改变字符串
        
        //1.字符串使用
        
        char *str = "Hello World!";
        
        NSString *str1 = [[NSString alloc] init];//创建空字符串
        
        NSString *str2 = @"Hello World!";//创建常量字符串
        
        NSString *str3 = [[NSString alloc] initWithString:str2];//NSString*类型
        
        NSString *str4 = [[NSString alloc] initWithUTF8String:str];//将C语言的字符串转换成OC的字符串(UTF8的编码格式),char类型
        NSString *str5 = [NSString stringWithString:str2];//通过已知字符串创建新的字符串
        
        NSString *str6 = [NSString stringWithUTF8String:str];//类方法
        
        NSString *str7 = [NSString stringWithFormat:@"%@%c%d",@"Hello World!",'V',88];//需要重点掌握***
        
        //2.判断两个字符串是否相等
        
        BOOL ret = [str6 isEqualTo: str5];
        if (ret) {
            NSLog(@"Equal");
        }
        else
            NSLog(@"Unequal");
        
        //3.判断两个字符串的大小
        
        NSComparisonResult result = [str6 compare:str7];
        if (result == NSOrderedSame) {
            NSLog(@"==");
        }
        else if (result == NSOrderedAscending)
        {
            NSLog(@"<");
        }
        else if (result == NSOrderedDescending)
        {
            NSLog(@">");
        }
        
        [str6 compare: str7 options: NSCaseInsensitiveSearch];//不区分大小写比较
        
        //4.从一个已知的字符串中截取部分字符,成为新的字符串
        
        NSString *str8 = [str7 substringFromIndex:5];//截取开始位置(从第N+1位开始复制字符串)
        
        NSString *str9 = [str7 substringToIndex:5];//截取结束位置(复制字符串到第N位)
        
        NSRange range = NSMakeRange(3, 4);//创建一个范围(第一个参数为从第N+1位开始复制字符串,第二个参数为复制M个字符数)
        NSString *str10 = [str7 substringWithRange:range];
        
        NSString *str11 = [str7 substringWithRange:(NSRange){3,4}];//NSMakeRange(3, 4)与(NSRange){3,4}等效
        
        //5.从一个已知的字符串中查找字符串
        
        NSString *tempStr = @"llo3";//定义查找指定字符串
        NSRange strRange = [str7 rangeOfString:tempStr];
        if (strRange.location == NSNotFound)
        {
            NSLog(@"NotFound %@ in %@",tempStr,str7);
        }
        else
        {
            NSLog(@"%ld,%ld",strRange.location,strRange.length);
        }
        
        //6.拼接字符串
        
        NSString *str12 = [str6 stringByAppendingString:str7];//被拼接的两个字符串本身并未发生改变,只是一个拼接参照
        NSLog(@"str12:%@",str12);
        
#pragma mark 可变字符串
        
        NSString *mstr = @"changliang";
        
        //创建空字符串的方法:
        NSMutableString *mstr1 = [[NSMutableString alloc] init];
        NSMutableString *mstr2 = [NSMutableString string];
        NSMutableString *mstr3 = [[NSMutableString alloc] initWithCapacity:100];//预设空间方式(100个字节的)
        
        [mstr1 setString:@"Hello World!"];//设置可变字符串的内容
        NSLog(@"mstr1:%@",mstr1);
        
        //可变字符串的特变:增、删、改、查
        
        [mstr1 appendString:@"XXOO"];//追加
        NSLog(@"mstr1:%@",mstr1);
        
        [mstr1 appendFormat:@"%@%cnihao",@"Hello World!",'V'];//格式化追加
        NSLog(@"mstr1:%@",mstr1);
        
        [mstr1 insertString:@"Hello World!" atIndex:4];//指定下表索引插入
        NSLog(@"mstr1:%@",mstr1);
        
        [mstr1 deleteCharactersInRange:(NSRange){3,5}];//删除指定范围的字符
        NSLog(@"mstr1:%@",mstr1);
        
        [mstr1 replaceCharactersInRange:(NSRange){2,4} withString:@"VV"];//替换指定范围的字符
        NSLog(@"mstr1:%@",mstr1);
        
        NSRange seek = [mstr1 rangeOfString:@"VV"];//查找指定字符串在原字符串中的位置
        if (seek.location == NSNotFound) NSLog(@"Erro");
        else NSLog(@"%ld,%ld",seek.location,seek.length);
        
#pragma mark 字符串数组
        
        //1.
        NSArray *arr1 = [[NSArray alloc] initWithObjects:@"one",@"two",@"three", nil];//通过构造方法直接创建含有3个字符串元素的字符串数组
        
        NSArray *arr2 = @[@"one",@"two",@"three"];//快速创建一个数组
        
        NSArray *arr3 = @[@"1",@"2",@"3"];//OC中数组的元素只能是对象***
        
        NSArray *arr4 = [[NSArray alloc] initWithArray:arr1];//通过一个已知的数组得到一个新的数组
        NSLog(@"arr4 = %@",arr4);
        NSArray *arr5 = [[NSArray alloc] initWithArray:arr1 copyItems:NO];//此方法做个了解
        
        NSArray *arr6 = [NSArray arrayWithObjects:@"one",@"two",@"three",nil];
        
        NSArray *arr7 = [NSArray arrayWithObjects:&arr6 count:arr6.count];
        
        //2.数组的取值方式
        NSString *zstr1 = arr2[0];// 1:相同数据类型 放到一起  集合  有序的  下标索引取值 <=> *(arr2 + 0)
        NSLog(@"zstr1:%@",zstr1);
        
        NSString *zstr2 = [arr3 objectAtIndex:1]; //数组的取值方式
        NSLog(@"zstr2:%@",zstr2);
        
        //3.遍历数组
        
        //枚举遍历法,用的较少
        NSEnumerator *en = [arr4 objectEnumerator];//创建一个枚举器
        id obj1;
        while (obj1 = [en nextObject]) {
            NSLog(@"en:%@",arr2);
        }
        
        NSEnumerator *reEn = [arr5 reverseObjectEnumerator];//创建一个逆向的枚举器
        id obj2;
        while (obj2 = [reEn nextObject]) {
            NSLog(@"reEn:%@",arr2);
        }
        
        //i遍历法
        for (int i = 0; i < arr7.count; i ++)
        {
            NSLog(@"imethod:%@",[arr7 objectAtIndex:i]);
        }
        
        //快速遍历法
        for (NSString *obj in arr2)//遍历arr2数组的每个对象,并存储在obj
        {
            NSLog(@"quick:%@",obj);
        }
        
        NSMutableString *container = [NSMutableString string];//构造一个空的可变字符串
        [container setString:@"Hello World!"];//为container设置值
        NSLog(@"zstr3-0:%@",container);
        for (NSString *zstr3 in arr2)//遍历arr2数组的每个对象并存储在zstr3
        {
            [container appendFormat:@"%@=",zstr3];//对container进行格式化追加
            NSLog(@"zstr3-1:%@",container);
        }
        
        [container deleteCharactersInRange:(NSRange){container.length - 1,1}];//删除最后一个‘=’
        NSLog(@"zstr3-2:%@",container);
        
        NSLog(@"jion:%@",[arr2 componentsJoinedByString:@"="]);//格式化拼接,返回值为NSString类型
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值