标签:
相比于C语言来讲,一般面向对象的语言都有一种类型来专门的处理字符串类型,如C++的string,JAVA的String.. Objectiver-C 自然也有种类型来专门处理字符串,叫做NSString。
Objective-C中的字符串也分为两种:NSString(不可变字符串),NSMutableString(可变字符串),NSMutableString类是NSString的一个子类。
注:Objective-C中的字符串 都需要用@"内容",前边必须要用一个@
(1)NSString--------不可变字符串
//初始化
NSString *str1 = @"123"; //直接赋值
NSString *str2 = [[NSString alloc] initWithFormat:str1];//根据字符串str1来创建字符串
/*
这种方法也是根据字符串str1来创建字符串
但是与上方的定方法不同的是:用 stringWithFormat 方法创建的字符串被称为 临时字符串
因为用这种方法创建的字符串会随时释放,在以后的iOS中,很难控制
*/
NSString *str3 = [NSString stringWithFormat:str1];//这表示字符串str3是根据str1建立的,相当于把str1的值赋给str3
将C语言的字符数组或者字符指针转换成NSString
/*
将C语言中的字符数组char[]或者字符指针char *转变成 NSString
方法是: [[NSString alloc] initWithUTF8String:(const char *)]
*/
NSString *str4 = [[NSString alloc] initWithUTF8String:p];//将字符指针p转换成NSString
//字符串比较是否相等
BOOL b = [str4 isEqualToString:str1];//返回YES(1) NO(0)
//字符串比较大小
/*
方法是:str1 compare:(NSString *),返回类型是 NSComparisonResult
需要用NSComparisonResult来接收结果,该类型是一个枚举
枚举的值是:
NSOrderedSame:相等
NSOrderedAsend:小于
NSOrderedDescending:大于
*/
NSComparisonResult result = [@"123" compare:@"123"]; //这是比较 字符串@“123” 和 字符串@“123”的大小
//字符串中查找子串
/*
方法:str5 rangeOfString:(NSString *)
该方法返回类型是 NSRage,该类型是一个结构体
结构体的元素:
location 表示位置
length 表示长度
*/
//下例表示在str5中查找子串@“my”,并且返回一个NSRange类型,从而获取位置以及长度
NSString *str5 = @"This is my Objective-C Project";
NSRange range = [str5 rangeOfString:@"my"];
int location = (int)range.location; //location是接受@”my“在str5中的位置(实际是下标)
int length = (int)range.length; //length是长度
//在字符串中提取字符串
/*
方法:[ str6 substringToIndex:(NSUInteger)]
从 str6 中提取从第0位到第6位的字符串,生成新的字符串,返回地址
注:此处的范围是[0,6)(此范围是下标范围)
str6 = @"0123456789";
结果:str7 = @"012345"
*/
NSString *str7 = [str6 substringToIndex:6];
/*
方法:[str6 substringFromIndex:(NSUInteger)]
从 str6 中提取从弟6位到末尾的字符串,生成新的字符串,返回地址
注:此处的范围是[6,n];(此范围是下标范围)
str6 = @"0123456789";
结果是: str9 = @"6789";
*/
NSString *str8 = [str6 substringFromIndex:6];
/*
方法:[str6 substringWithRange:(NSRange)]
这个方法的含义是:截取从第NSRange.location个元素开始,截取长度是NSRange.length
返回地址
下例表示:从str6中 从第4个开始截取长度为5个的字符串(依旧是下标来计数)
范围:[4,9)
str6 = @"0123456789"
str9 = @"45678"
*/
NSString *str9 = [str6 substringWithRange:NSMakeRange(4, 5)];
(2)NSMutableString-------可变字符串(因为 可变字符串 是继承于不可变字符串 所有上述方法 可变字符串依旧能用,但初始化有一种是不能定义的,下面会说)
//初始化:
NSMutableString *str1 = @"123456789";//这种代码是错误的,不能这么定义!!
NSMutableString *str1 = [[NSMutableString alloc] init];
[str1 setString:@"abc"];//给字符串str1设置值
//字符串追加
/*
方法:str1 appendString:(NSString *)]
在str1后面追加字符串
*/
[str1 appendString:@"123"];
//格式化追加
[str1 appendFormat:@"%c",‘Z‘];
//插入字符串
/*
方法:[str1 insertString:(NSString *) atIndex:(NSUInteger)]
意思是将 字符串NSString 插入到 字符串str1的第 NSUInteger 个位置(同样是相对于下标)
str1 = @"0123456789";
执行后:str1 = @"012345SSSSSS6789";
*/
[str1 insertString:@"SSSSSS" atIndex:6]; //将字符串 @"SSSSSS" 插入到 字符串str1的第6个位置
//这个方法与上面一样,只不过在 insertString: 之后用的是一个通过格式化的新创建的NSString
[str1 insertString:[NSString stringWithFormat:@"%d",-36] atIndex:6];
//删除字符串
/*
方法:[str1 deleteCharactersInRange:(NSRange)]
NSRange是一个结构体,内有两个成员变量
location 代表开始的位置
length 代表长度
范围(location ,location + length](下标)
str1 = @"0123456789";
结果:str1 = @"01289";
*/
[str1 deleteCharactersInRange:NSMakeRange(3, 5)]; //将 str1 中的第4个元素开始删除,删除到第9(4+5)个(包括第9个)
//修改字符串(替换字符串)
/*
方法:[str1 replaceCharactersInRange:(NSRange) withString:(NSString *)]
NSRange是一个结构体,解释看删除字符串的解释
将 NSString 的字符串 替换 str1中的NSRange 的字符串
str1 = @"0123456789";
结果:str1 = @"012XXXXX56789";
*/
[ str1 replaceCharactersInRange:NSMakeRange(3, 2) withString:@"XXXXX"];//将 str1 的第3个(实际位第4个,因为是下标)开始,用字符串@"XXXXX"替换 2个长度的字符串
//字符串与数据的应用
例如:
NSString *str = @"This is my OBjective-C Project!";
NSArray *arr = [str componentsSeparatedByString:@" "];//意思是用空格来分割字符串,并将值存入数组
NSString *str1 =[arr componentsJoinedByString:@" "];//意思是将数组用" "连接起来
Objective-C学习- 字符串类型 NSString 和 NSMutableString
标签:
原文地址:http://www.cnblogs.com/Yue-Wen/p/4691421.html