黑马程序员---OC学习笔记之NSString的其他使用和NSMutableString的用法

——Java培训、Android培训、iOS培训、.Net培训——–

一、NSRange的使用

1、定义

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

【NSUInteger定义】

typedef unsigned long NSUInteger;

2、创建方式

    //方式1:先定义再赋值
        NSRange ran;
        ran.location = 7;
        ran.length = 3;
        //方式2:定义同时赋值
        NSRange ran2 = {7,3};//最简单
        //方式3:定义同时赋值,指定给某个属性赋值
        NSRange ran3 = {.location = 7, .length = 3};
        //方式4:OC中新增的NSMakeRange(location,length)
        NSRange ran4 = NSMakeRange(7, 3);

        //可以把NSRange转换成NSString
        NSString *str3 = NSStringFromRange(ran4);
        NSLog(@"ran4 = %@",str3);

打印结果:
2015-10-07 23:35:43.791 Foundation秘籍[3539:303] ran4 = {7, 3}

二、字符串截取

1、字符串截取

NSString *str = @"http://ios.itcast.com";

        //1)从指定位置到最后结束截取字符串 substringFromIndex
        NSLog(@"%@",[str substringFromIndex:7]);
        //2)从开头截取到指定的位置 substringToIndex
        NSLog(@"%@",[str substringToIndex:7]);
        //3)截取一个范围 substringWithRange
        NSRange r = NSMakeRange(7, 3);
        NSLog(@"%@",[str substringWithRange:r]);

打印结果;
2015-10-07 23:40:42.309 Foundation秘籍[3654:303] ios.itcast.com
2015-10-07 23:40:42.311 Foundation秘籍[3654:303] http://
2015-10-07 23:40:42.312 Foundation秘籍[3654:303] ios

2、应用:提取标签中的字符串

  //提取出标签中的字符串
        NSString *str = @"黑马&传智播客";
        //公式 > loc1+1 , 
        NSUInteger loc1 = [str rangeOfString:@">"].location + 1;
        NSUInteger loc2 = [str rangeOfString:@"].location;
        NSRange r = {loc1, loc2 - loc1};

        NSLog(@"%@",[str substringWithRange:r]);

打印结果:
2015-10-07 23:59:08.674 Foundation3791:303] 黑马&传智播客

三、字符串替换

stringByReplacingOccurrencesOfString:目标字符串 withString:取代字符串
例如:

        //替换字符串:把itcast替换成itheima
        NSString *str = @"黑马&传智播客";
         NSLog(@"old str:%@",str);
        str = [str stringByReplacingOccurrencesOfString:@"itcast" withString:@"itheima"];

        NSLog(@"new str:%@",str);

【打印结果】
2015-10-08 00:05:08.039 Foundation[3910:303] old str:黑马&传智播客
2015-10-08 00:05:08.041 Foundation[3910:303] new str:黑马&传智播客

四、NSString的其他用法

1、获取字符串的每个字符

1)- (NSUInteger)length;返回字符串的长度(多少个字符,无论中英文字符,一个字符就是 一个字节)
GBK gb2313 占2个字节
utf8 占3个字节

2)返回指定位置的字符
char ch = [str characterAtIndex:2];

3)字符串和其他类型的转换问题

      //字符串与其他类型的转换
        NSString *str = @"123";
        int a = [str intValue];
        str = @"34.32f";
        float b = [str floatValue

4)C字符串转换成OC字符串问题
因为C语言中英文占用字节数是不同的,而OC中英文占用字节数都是1,所以他们之间需要转换
例1:C字符串转成OC字符串

        //定义一个C的字符串
        char *str = "I am Amos...";
        printf("str = %s\n",str);
        //转换成OC字符串
        NSString * str2 = [NSString stringWithUTF8String:str];
        NSLog(@"str2 = %@",str2)

打印结果:
str = I am Amos…
2015-10-08 00:16:36.468 Foundation[4079:303] str2 = I am Amos…

例2:OC字符串转C语言

        //定义OC字符串
        NSString * str2 = @"I am Amos...";
        NSLog(@"str2 = %@",str2);
        //转换成一个C的字符串
        const char *str = [str2 UTF8String];
        printf("str = %s\n",str);

打印结果:
2015-10-08 00:18:40.040 Foundation[4122:303] str2 = I am Amos…
str = I am Amos…

五、NSMutableString介绍

1、NSMutableString基本概念

1)NSMutableString类继承NSString,NSMutableString好比一个字符串链表,它可以任意的动态地在字符串中添加字符串,删除字符串,指定位置插入字符串,使用它来操作字符串更加灵活

2)NSMutableString与NSString的区别
A、NSString是不可变的,是一个常量,里面的内容是不能修改的
B、NSMutableString是可变的,里面的内容是可以随时修改的
【NSMutableString中能使用所有NSString的方法】

2、字符串的可变与不可变

【不可变】指的是字符串 在内存中占用的存储空间固定,并且存储的内容不能发生变化
【可变】指的是字符串在内存中占用的存储空间不固定,并且存储的内容可以被修改
例如:

        //比较同一个字符串指针指向不同字符串常量的地址
        NSString * str2 = @" I am Amos... ";
        NSLog(@"str2 = %p",str2);
        str2 = @"abc";
        NSLog(@"str2 = %p",str2);

打印结果:
2015-10-08 00:27:47.769 Foundation秘籍[4192:303] str2 = 0x100001040
2015-10-08 00:27:47.772 Foundation秘籍[4192:303] str2 = 0x100001080

例如:

        //定义一个可变字符串,在内存的堆区分配
        NSMutableString *str = [NSMutableString stringWithFormat:@"abc"];
        NSLog(@"1:str = %@ ,address %p",str,str);
        //追加字符串
        [str appendString:@"def"];
        NSLog(@"2:str = %@ ,address %p",str,str);

打印结果:
2015-10-08 00:32:14.777 Foundation[4303:303] 1:str = abc ,address 0x10010a3d0
2015-10-08 00:32:14.780 Foundation[4303:303] 2:str = abcdef ,address 0x10010a3d0

六、NSMutableString的常用方法

1、有如下用法

  //定义一个可变字符串,在内存的堆区分配
        NSMutableString *str = [NSMutableString stringWithFormat:@"abc"];
        NSLog(@"1:str = %@ ,address %p",str,str);
        //1)追加字符串
        [str appendString:@"def"];
        NSLog(@"2:str = %@ ,address %p",str,str);
        //2)格式化追加字符串
        [str appendFormat:@"%@ am %@", @"I",@"Amos"];
        NSLog(@"3:str = %@",str);
        //3)删除字符串的一部分,删除一个范围的
        [str deleteCharactersInRange:NSMakeRange(0, 6)];
        NSLog(@"4:str = %@",str);
        //4)在指定位置插入一个字符串
        [str insertString:@" not" atIndex:4];
         NSLog(@"4:str = %@",str);
        //5)替换字符串的一部分
        [str replaceCharactersInRange:NSMakeRange(9, 4) withString:@"Allen"];
         NSLog(@"4:str = %@",str);

【注意1】
//1)给可变字符串赋值一个不可变的值,编译器不会报错,只有警告
//但是运行时才判断类型
NSMutableString *mStr = @”Abc”;
[mStr appendString:@”Def”];//运行时报错

【注意2】
//2)string赋值可以把原来的值覆盖
str.string = @”“;//用空覆盖
NSLog(@”4:str = %@”,str);

【注意3】位枚举,枚举值是2 的0、1、2、3。。。。次方

        NSRange r = [str rangeOfString:@"A" options:0 range:NSMakeRange(1, 4)];

假如想用rangeOfString方法,但是不想指定optionss的值,此时把options设为0.这就体现出为枚举的好处

你可能感兴趣的:(Objective-C基础)