-----------android培训、java培训、java学习型技术博客、期待与您交流!-----------
OC中Foundation框架NSString用法总结
一、NSString的创建方式
1、创建字符创常量
NSString *str = @"XXXXXXXXXXXXXX";
此方式创建的字符串不能修改,储存在内存常量区,当再次使用字符串时不会再分配空间,只是让指针指向这个字符串的首地址
2、格式化创建字符串
NSString *str = [NSString stringWithFornat:@”%@“ , @"XXXXXXXXXXXXX"];
字符串存在内存的堆区
NSString *str = [ [NSString alloc] initWithFormat:@"this is %d" , 10];
字符串存在常量区
3、从文件中读取
NSString *str = @"*************************";
//定义一个错误对象
NSError *err;
//写入字符串
[str writeToFile:@"文件的路径" atomically: 原子性(yes/NO)encoding:NSUTF8StringEncoding error: 有没有错误(nil)];
// 读取字符串
NSString *str = [NSString stringWithContentsOfFile:@"文件的路径" atomically: 原子性(yes/NO)encoding:NSUTF8StringEncoding error: 有没有错误 (nil)];
4、使用NSURL读写字符串,用于处理地址
通过URLWithString 构建本地路径的URL、网络资源路径、可以构建路径,调用手机系统的程序
通过fileWithPath 获取本地文件路径
ftp:// 访问ftp文件
file: // 访问本地文件
NSURL写入文件
NSString * str = @"========";
//创建一NSURL路径
NSURL *url = [NSURL URLWithString:@" 文件路径 "];
NSURL *url2 = [NSURL fileWithPath:@"本地文件路径" ];
// 写入到URL中
[str writeToURL:@“文件路径”atomically:YES/NO encoding: NSUTF8stringEncoding error:nil ];
// 读取字符串
[NSString stringWithContentsOfFile: ]; // 使用 fiel 路径读取
[NSString stringWithContentsOfURL: ]; // 使用 url 读取
二、NSString字符串比较函数
1、比较字符串大小compare
(1)取出每个字符的ASCII值,比较ASCII值得大小,
(2)默认区分大小写
(3)不能增加条件
方法返回结构有三种:NSOrderedAScending(升序), NSOrderedSame(相同), NSOrderedDescending(降序)
str1 > str2 时 返回值为 NSOrderedAscending (-1) 是升序,
str1 = str2 时 返回值为 NSOrderedDescending (1) 是降序,
str1 < str2 时 返回值为 NSOrderedSame (0) 是相等的,
2、不区分大小写
compare:(NSString *) options:NSCaseInsensitiveSearch
3、进行完全比较,区分大小写, 系统默认的
compare:(NSString *) options:NSLiteralSearch
4、比较字符创的字符个数,而不是字符的值
compare:(NSString *) options:NSNumericSearch
注意:方法后面可以加上 | 添加多个条件
如:compare:(NSString *) options:NSCaseInsensitiveSearch | NSLiteralSearch
要区分大小写既要参考个数进行比较
5、isEqualToString 函数
“ == ” 不能够判断字符串是否相等,因为判断的是字符串地址,用isEqualToString:来判断字符串内容是否相等
NSString *str1 = @"abc"; // 常量区
NSString *str2 = @"abc";
NSString *strr3 = [NSString stringWithFort:@"abc"]; // 堆区
用 == 判断结果为 str1 = str2 但是不等于str3,
[ str1 isEqualToString:strr3 ]; 是不相等的,
返回结果是BOOL类型
区分大小写
三、NSString的前后缀检查
1、判断字符串前缀
[ 字符串对象 hasPrefix:@"字符串"];
返回值是YES/NO,是BOOL类型
如:检测是不是一个网址
[ url hasPrefix:@"http://" ] || [ url hasPrefix:@"https://" ] ;
2、判断字符串后缀
[ 字符串对象 hasSuffix:@"字符串"];
返回值是YES/NO,是BOOL类型
如:检测是不是一张图片
[ url hasSuffix:@".jpg" ] || [ url hasSuffix:@".png" ] || [ url hasSuffix:@".gif" ] ;
四、字符串查找
字符串1 rangeOfString :字符串2
检查子字符串2在字符串1内容中首次出现的位置,返回的是被查找的字符串首次出现的位置 (NSRange类型变量名 . location) 和被查找的字符串的长度 (NSRange类型变量名 . length )
返回值 是NSRange 类型的用%lu 格式输出
如果查找到,返回的是被查找字符串的出现的位置和长度
如果找不到,返回的是一个很大的数值,它就是NSNot Found,最大的long整型的数
五、NSRange的使用及创建方式
1、NSRange是Foundation 框架中比较常用的结构体,用来表示一个范围,
2、创建一个NSRange 变量
(1)NSRange range;
range.location = 8;
range.length = 3;
(2)NSRange range = { . location = 8, . length = 3 };
NSRange range = { . length = 3 }; //只给某一个变量赋值
range = (NSRange) {8,3}; //先定义后赋值
(3)使用NSMakeRange函数
NSRange range = NSMakeRange( 8, 3 );
(4)最直接的方式
NSRange range = [ 8, 3 ];
3、查看NSRange 变量的值
把结构体变量转换为NSString 类型
NSStringFromRange(range)
运行结果为: { 8, 3 }
六、字符串的截取和替换函数
1、-(NSString *) substingFromIndex: (NSUInter) from; 从指定位置到尾部结束,包括指定位置from的字符 (有始有终)
2、-(NSString *) substingToIndex: (NSUInter) to ; 从字符串的开头一直截取到指定位置to的字符,不包括该位置的字符 ( 有始无终)
3、-(NSString *) substingWithRange: (NSRange) range ; 按照 NSRagne 给出的范围截取字符串 (有始有终)
4、字符串替换
stringByReplacingOccurrentcesOfString: @"源字符串中的内容" withString: @"要替换成新的字符串"
例如:将 NSString *str = @"a*bc*d*";中的*号替换为 a
str = [ str stringByReplacingOccurrentcesOfString: @"*" withString: @"a" ];
运行结果为: str = aabcada
七、NSString的其他用法
1、获取字符串的每个字符
-(NSUInteger) length; 返回字符串的长度
-(unichar) characterAtIndex:(NSUInteger) index; 返回 字符串某个位置对应的字符
2、字符串和其他数据类型转换
字符串转换基本数据类型
-(double) doubleValue; 字符串转换为double类型
-(float) floatValue; 字符串转换为float类型
-(int) intValue; 字符串转换为int类型
3、将C中字符串转换为OC语言中的字符串
char *s = "zhangsan"; //c语言中的字符串,只能以 %s 输出
NSString * str1 = [NSString stringWithUTF8String: s ]; //将C字符串转换为OC语言中的字符串
4、将OC中字符串转换为C语言中的字符串
NSString *str2 = @"abc";
const char *s2 = [ str2 UTF8String ]; // 将OC字符串转换为C语言中的字符串,类型是const char 类型,是字符串常量,不允许修改
5、去除首尾空格
[ str stringByTrimmingCharacterInSet:[ NSCharacterSet witheapaceCharacterSet] ] ;
八、 NSMutableString的使用
1、NSString是不可变的,NSString储存的字符串在内存中占用的存储空间和内容都是固定的不能发生变化,是在常量区,
2、NSMutableString 是可变的,在内存中所占的存储空间是不固定的,存储的内容可以被修改
3、NSMutableString 能使用NSString 的所有方法
九、NSMutableString中常用的方法
1、创建一个空的NSMutableString
[NSMutableString string ];
2、拼接aString到最后面
-(void) appendString: (NSString *) aString;
3、拼接一段格式化字符串到最后面
-(void) appendFormat: (NSString *) format,......;
例如:NSMutableString *str = [NSMutable string];
[ str appendFormat:@"http://www.badidu.com/%d", 100 ]; // NSMutableString是可变的不需要返回值
NSLog(@"%@", str);
运行结果为:http://www.badidu.com/100
4、从定义的range开始,删除字符串中的字符
-(void) deleteCharactesInRange: (NSRange) range;
例如:[str deleteCharactesInRange: NSMakeRange(3, 4) ];
NSLog(@"%@", str);
运行结果:httwww.badidu.com/100
5、在指定位置插入一个字符串
[ str insertString:@"p://" atIndex: 3 ];
运行结构为:httwww.badidu.com/100
6、替换字符串的一部分内容
[ str replaceCharactersInRange: NSMakeRange (11, 5) withString :@"heima" ];
运行结果:httwww.heima.com/100
十、 NSMutableString 使用注意事项
1、不能给可变字符串赋值不可变的字符串常量
如:NSMutableString *str = @"abc"; 此时会发出警告,两边类型不一致,是属于动态类型,只有在运行的时候才检测是什么类型的数据
2、NSMutableString 的string 属性会将源对象的所有字符串都覆盖掉
例如:NSMutableString *str = [NSMutableString stringWithFormat:@"abcd" ];
[str appendString:@"****" ];
NSLog(@"%@", str);
运行结果为:abcd****
NSMutableString *str = [NSMutableString stringWithFormat:@"abcd" ];
str.string = @" "; // 用空将源字符串的字符覆盖
[str appendString:@"****" ];
NSLog(@"%@", str);
运行结果为:****
3、位枚举,
如果一个方法中的参数是为枚举时,可以给个0,此时表示该参数不起作用