NSString 作为作为OC的一种数据类型, 他帮我们做了很多事情, 而且也是我们在项目中运用频率很高的一个数据类型.我们经常会对它进行各式各样的操作,生成新的字符串,修改,查找,比较等等. 但是有人可能会问, 既然我已经有C的字符串了,为撒子还要在定义一个字符串对象呢? 嘿嘿,首先,我们使用NSString对象来处理字符串操作, 一方面是可以统一很多方面的东西,比如api, 例如NSArray,NSDictionary中都是存放的对象, 而且使用NSString还可以使用isKindofCLass的很多常用查询. 假如我们真的去使用了C的字符串去替代NSString的话, 那我们光是桥接代码就会让人写到吐,因为字符串在使用中的频率还是比较高的. 在和其他数据对象进行联合使用的时候,那种怪异的语法肯定也会让使用者大呼痛苦的. 向来注重用户体验的苹果肯定不会这样子干的,所以,定义一个NSString 对象还是很必要的. NSString 主要的方法都在 Foundation/NSString.h 中定义, 提供了很多的方法接口

常量字符串

1
2
NSString *name = @"两好三坏";
NSString *addName = [@"name:" stringByAppendingString:name];

常量字符串不仅可以作为消息的参数, 还可以作为消息的接收者;

NSString 比较

字符串比较出结果后会返回一个 NSComparisonResult 类型的枚举值. 分别是 * NSOrderedAscending 左侧小于右侧 * NSOrderedSame 两者相同 * NSOrderedDescending 右侧小于左侧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//比较消息的接受者he参数字符串aString,参数不可以是nil,此方法区分大小写 如果相比较两个字符串是否相同的话还可以使用 isEqualToString:
-(NSComparisonResult)compare:(NSString *) aString;
// 不区分大小写比较, 上一个compare 的方法也可以通过添加参数进行选择大小写是否作为判断标准
-(NSComparisonResult) caseInsensitiveCompare:(NSString *)aString;
- (BOOL)isEqualToString:(NSString *)aString;
NSString *str0 = @"testString";
NSString *str1 = @"testString";
if([str0 isEqualToString:str1]){
NSLog(@"字符串完全相等");
}
//判断是否以 参数 开头的string
- (BOOL)hasPrefix:(NSString *)str;
//判断是够以 参数 结尾的string
- (BOOL)hasSuffix:(NSString *)str;

截取字符串

1
2
3
4
5
6
// 返回一个anIndex 开始到结尾的新字符串, 不包含form索引
- (NSString *)substringFromIndex:(NSUInteger)from;
//返回一个新字符串, 从to开始到结束,包含to的索引
- (NSString *)substringToIndex:(NSUInteger)to;
//通过一个range返回一个新的字符串对象
- (NSString *)substringWithRange:(NSRange)range;

检索和置换

1
2
3
4
5
6
7
8
9
10
11
12
NSString *str0 = @“nice to meet you";
NSString *temp = @"meet";
NSRange rang = [str0 rangeOfString:temp];
NSLog(@"搜索的字符串在str0中起始点的index 为 %d", rang.location);
NSLog(@"搜索的字符串在str0中结束点的index 为 %d", rang.location + rang.length);
NSString *str = [str0 stringByReplacingCharactersInRange:rang withString:@"met"];
NSLog(@"替换后字符串为%@", str);
//将字符串中" " 全部替换成 *
str = [str0 stringByReplacingOccurrencesOfString :@" " withString:@"@"];
NSLog(@"替换后字符串为%@", str);
//还可以使用下面这个方法进行替换
//stringByReplacingOccurrencesOfString:(NSString *)withString:(NSString *) options:(NSStringCompareOptions) range:(NSRange)

类型转换

可以使用一些方法将NSString 转成其它基础数据类型; NSString *temp = @”11.21”; * [str doubleValue]; * [str intValue] * [str integerValue] * [str boolValue] * …

路径处理

文件的路径可以使用 NSString 来表示,而且NSString提供了常用的处理文件路径的方法; eg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// @"/tmp/image/cat.tiff"
//返回路径的最后一部分 -> cat.tiff
-(NSString *)lastPathComponent;
//将str 追加到现有字符串的末尾并返回.会根据需要自动追加分隔符
- (NSString *)stringByAppendingPathComponent:(NSString *)str;
//扩展名
-(NSString *)pathExtension;
//将 . 和指定的扩展名追加到到最后一个组成部分上
- (nullable NSString *)stringByAppendingPathExtension:(NSString *)str;
// 删除文件的扩展名.如果不存在,返回原来的字符串
-(NSString *)stringByDeletingPathExtension;
//判断是不是一个绝对路径
-(BOOL)isAbsolutePath;
...

文件的输入和输出

1
2
3
4
// 通过一个 文件内容  初始化一个 nsstring;
[NSString stringWithContentsOfFile:@"" encoding:NSUTF8StringEncoding error:nil]
//将字符串内容写入到 path 的路径当中; 成功就返回YES/
[@"hduashfuiasifbsa" writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];