——Java培训、Android培训、iOS培训、.Net培训——–
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
【NSUInteger定义】
typedef unsigned long NSUInteger;
//方式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}
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
//提取出标签中的字符串
NSString *str = @"黑马&传智播客" ;
//公式 > loc1+1 , loc2 构建一个range = {loc1+1, loc2 - (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:黑马&传智播客
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…
1)NSMutableString类继承NSString,NSMutableString好比一个字符串链表,它可以任意的动态地在字符串中添加字符串,删除字符串,指定位置插入字符串,使用它来操作字符串更加灵活
2)NSMutableString与NSString的区别
A、NSString是不可变的,是一个常量,里面的内容是不能修改的
B、NSMutableString是可变的,里面的内容是可以随时修改的
【NSMutableString中能使用所有NSString的方法】
【不可变】指的是字符串 在内存中占用的存储空间固定,并且存储的内容不能发生变化
【可变】指的是字符串在内存中占用的存储空间不固定,并且存储的内容可以被修改
例如:
//比较同一个字符串指针指向不同字符串常量的地址
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 *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.这就体现出为枚举的好处