OC—Foundation中常用的类包括:字符串,集合,字典等
字符串:NSString
Java中string的常量是不可以改变的,stringBuild,和stringBuff中的字符串是可以改变的
OC中的NSString也是不可变的
- 创建常量字符串
NSString *string = @“This is a String!”;
- 创建空字符串,给予赋值
NSString *string = [[NSString alloc] init]; string = @“This is a String!”;
- 通过字符串创建字符串
[[NSString alloc] initWithString:@“This is a String!”]; //或者[[NSString alloc] initWithFormat:@“My age is %i”,19];
- 用标准c创建字符串
char *cString ="这是一个字符串”; [[NSString alloc] initWithString:cString encoding:NSUTF8StringEncoding]; 或者[[NSString alloc] initWithUTF8Sting:cString]; //字符串编码可以在NSString.h中查阅
通过alloc创建的字符串是需要释放的,用@赋值的字符串不需要释放;
用如下方法可以实现不需要管理内存:
NSString *str=[[NSString alloc] initWithString:@“this is a string”]; //这个创建str需要释放内存 NSString *str=[NSString stringWithString:@"this is a string"]; //这个创建str不需要释放内存
以上代码只是比较用,如果要同时使用,需要先释放掉前一行创建的对象,否则会造成内存泄露
从文本文件中读取文本:
NSString *path=@“/User/desktop/test.txt”;
nsstring *str=[NSString stringWithContentOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSString的导出
NSString *path =@“/User/desktop/test.txt”;
NSString *str=@"123";
NSError *error;
[str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
其中atomically表示是否使用原子性:原子性意思就是,在写入文件的时候会创建一个临时文件,当所有内容都写入之后再把这些内容拷贝到目的文件。这样可以保证程序在写入出错的时候不会对目的文件造成破坏。
如果文件不存在会自动帮我们创建文件,如果文件夹不存在,则会报错。
NSString的大小写处理
- -(NSString *)uppercaseString 全部转为大写字母
- -(NSString *)lowercaseString 全部转为小写字母
- -(NSString *)capitalizedString 首字母遍大写,其他字母都变小写
NSString的比较
- -(BOOL)isEqualToString:(NSString *)aString
比较两个字符串的内容是否相同,相同就返回YES,不同就返回NO
- -(NSComparisonResult)compare:(NSString *)string
逐个字符的进行比较,返回NSComparisonResult来显示比较结果
NSComparisonResult是一个枚举,有3个值;
NSOrderedAscending =-1L, NSOrderedSame, NSOrderedDescending
如果左侧大于右侧,返回NSOrderedDescending,
如果左侧小于右侧,返回NSOrderedAscending,
否则返回NSOrderedSame
- -(NSComparisonResult)caseInsensitiveCompare:(NSString *)string
忽略大小写进行比较,返回值于compare:一致
NSString中搜索字符串
-(BOOL)hasPrefix:(NSString *)aString是否以aString开头
-(BOOL)hasSuffix:(NSString *)aString是否以aString结尾
-(NSRange)rangeOfString:(NSString *)aString检查是否包含了aString,如果包含,就返回aString的位置,如果不包含,NSRange的location为-1,length为0
-(NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask
可以产地一个mask参数,改变搜索方式
比如NSStringCompareOptions为NSBackwardsSearch表示从尾部开始搜索
-(NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptions)mask range:(NSRange)searchRange 还可以用searchRange指定搜索范围
NSString的截取
- -(NSString *)substringFromIndex:(NSUInteger)from 从指定位置from开始(包括指定位置的字符)到尾部
- -(NSString *)substringToIndex:(NSUInteger)to 从字符串的开头一致截取到指定的位置to,但不包括该字符
- -(NSString *)substringWithRange:(NSRange)range 按照所给出的NSRange从字符串中截取子串
- -(NSArray *)componentsSeparatedByString:(NSString *)separator
用separator为分隔符截取子串,返回一个装着所有子串的集合NSArray
NSString强制类型转换
- -(double)doubleValue
- -(float)floatValue
- -(int)intValue
- -(char *)UTF8String
NSMutableString
NSString是不可变的,不能删除字符或者添加字符。NSString有一个子类NSMutableString,称为可变字符串
创建可变字符串:
NSMutableString *str=[[NSMutableString alloc]initWithCapacity:10]; [str setString:@"1234"]; //拼接一个字符串 [str appendString:@"5678"]; //拼接字符串 [str appendFormat:@"age is %i,height is %.2f",24,1.75f]; //替换字符串 NSRange range=[str rangeOfString:@"height"]; [str replaceCharactersInRange:range withString:@"no"]; //插入字符串 [str insertString:@"abc" atIndex:2];
capacity只是一个最优值,字符串的大小并不仅限于所提供的容量,设置了capacity,可以预分配一块内存来存储它,操作速度会快很多
当然,也可以使用创建NSString的方法来创建NSMutableString,因为NSMutableString是NSString的子类,NSString能用的方法,NSMutableString都能使用