Objective-C中的字符串也分为两种:NSString(不可变字符串),NSMutableString(可变字符串),NSMutableString类是NSString的一个子类。
注:Objective-C中的字符串 都需要用@"内容",前边必须要用一个@
(1)NSString--------不可变字符串
// // main.m // NSString(不可变字符串)博客 // // Created by YueWen on 15/9/8. // Copyright (c) 2015年 YueWen. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { /** * 不可变字符串 */ /*字符串的基本的初始化,还有很多通过url,data,path等形式转化的字符串,这里不做过多的说明*/ //objc方式的创建对象的普遍方法,init是NSObject的方法,几乎所有的类都是继承(以后会有博客来讲述一下继承)于NSObject 类 NSString * s1 = [[NSString alloc] init]; //一种和java 一样的创建对象的方法,刚从java 转过来的程序员会比较青睐与这种初始化 NSString * s2 = [NSString new]; //通过字符串s1来创建字符串s3对象 NSString * s3 = [NSString stringWithString:s1]; //这种方式叫做格式化创建,会将字符串变成你想要变成的格式 NSString * s4 = [NSString stringWithFormat:@"我是第%d个学生!",2]; //该方法是将 C语言的字符串 转成 objc 的 NSString 对象 NSString * s5 = [NSString stringWithUTF8String:"RunIntoLove"]; /*以下3种形式与s3,s4,s5的结果是一样的,只不过上面是用了便利构造器创建,下面使用了普通的便利初始化函数创建,效果是一样的*/ //通过字符串s1来创建字符串s3对象 NSString * s3_1 = [[NSString alloc ]initWithString:s1]; //这种方式叫做格式化创建,会将字符串变成你想要变成的格式 NSString * s4_1 = [[NSString alloc ]initWithFormat:@"我是第%d个学生!",2]; //该方法是将 C语言的字符串 转成 objc 的 NSString 对象 NSString * s5_1 = [[NSString alloc ]initWithUTF8String:"RunIntoLove"]; //最基础的初始化 NSString * s6 = @"RunIntoLove"; /*常用方法*/ /** * 获取s6的下标为2的字符,即第三个字符,c = 'n' */ unichar c = [s6 characterAtIndex:2]; /** * 获取s6的小标为3(包含小标为3的)开始以后的字符串 * 结果是:s7 = IntoLove */ NSString * s7 = [s6 substringFromIndex:3]; /** * 获取从开头到下标为3(不包含下标为3)的字符串 * 结果是:s8 = Run */ NSString * s8 = [s6 substringToIndex:3]; /** * 获取从下标为第某位开始,获取长度为多少的字符串 * * @param 2 表示从下标为2的字符开始 * @param 3 表示长度为3 * 结果是:s9 = nIn * @return 处理后字符串 */ NSString * s9 = [s6 substringWithRange:NSMakeRange(2, 3)]; /** * 字符串的字符全部变为大写 * 结果是 s11 = RUNINTOLOVE */ NSString * s11 = [s6 uppercaseString]; /** * 字符串的字符全部变为小写 * 结果是 s12 = runintolove */ NSString * s12 = [s6 lowercaseString]; /** * 字符串中每个单词的首字母大写,其余的小写 * 判断依据是空格 * 结果是 s13 = Runintolove */ NSString * s13 = [s6 capitalizedString]; /** * 字符串比较,返回值是NSComparisonResult * NSCompareisonResult 是一个结构体 * NSOrderedAscending 表示是升序,就是说s6小 * NSOrderedSame 表示是相等的 * NSOrderedDescending 表示是降序,就是说s6大 * 示例返回的是 NSOrderedSame */ NSComparisonResult result = [s6 compare:@"RunIntoLove"]; /** * 字符串比较,返回值是一个BOOL类型 * 只用来描述是否相同 * 实例返回的是YES */ BOOL equal = [s6 isEqualToString:@"RunIntoLove"]; /** * 字符串是否有 @"Run" 这个前缀 * 示例返回值是YES */ BOOL prefix = [s6 hasPrefix:@"Run"]; /** * 字符串是否有 @“Love” 这个后缀 * 示例返回值是YES */ BOOL suffix = [s6 hasSuffix:@"Love"]; /** * 字符串是否有 @“nIn” 这个子串 * 示例返回值是YES */ BOOL contain = [s6 containsString:@"nIn"]; /** * 字符串中 @“Love” 的这个子串的位置 * 返回的range * loaction(即位置下标) = 7 * length (长度) = 4 */ NSRange range = [s6 rangeOfString:@"Love"]; /*数字类型转换*/ NSString * s10 = @"123"; //转型成整型 int a = [s10 intValue]; NSInteger b = [s10 integerValue]; long long c1 = [s10 longLongValue]; //转型成浮点型 float d = [s10 floatValue]; double e = [s10 doubleValue]; return 0; }
(2)NSMutableString-------可变字符串(因为 可变字符串 是继承于不可变字符串 所有上述方法 可变字符串依旧能用,但初始化有一种是不能定义的,下面会说)
// // main.m // NSMutableString(可变数组) 博客 // // Created by YueWen on 15/9/8. // Copyright (c) 2015年 YueWen. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { /** * 可变字符串 */ /* 初始化 大多数不可变字符串的初始化方法 可变字符串都有相应类似的初始化方法,在这里不再赘余 */ //这种定义可变字符串的方法是错误的,objc的动态机制,会将mString1变成 不可变字符串 NSString NSMutableString * mString1 = @"RunIntoLove"; //以下两种的初始化方法是相同的,只不过上面依旧是使用了 便利初始化 方法来初始化, 下面是用了 便利构造器 来完成初始化 NSMutableString * mString2 = [[NSMutableString alloc] init]; NSMutableString * mString3 = [NSMutableString string]; //一种和java 一样的创建对象的方法,刚从java 转过来的程序员会比较青睐与这种初始化 NSMutableString * mString4 = [NSMutableString new]; //初始化时 设置元素的数为3 当然 这不重要 因为可变字符串是可以改变长度的 NSMutableString * mString5 = [[NSMutableString alloc]initWithCapacity:3]; NSMutableString * mString6 = [NSMutableString stringWithCapacity:3]; //初始化一个可变字符串,用于后面的方法例子 NSMutableString * mString7 = [NSMutableString stringWithString:@"RunIntoLove"]; /*相比不可变字符串 *可变字符串的最大的优势 在于 他可以在自身进行变化 *下面来说一下 常用的 可变字符串处理的方法 */ /** * 插入字符串 * 在下标为3(包含)的位置 插入字符串 @"Run" * 执行方法之前:mString7 = @"RunIntoLove" * 执行方法之后:mString7 = @"RunRunIntoLove" */ [mString7 insertString:@"Run" atIndex:3]; /** * 指定位置删除字符串 * NSRange 是一个结构体 * 方法里的表示 从第三个下标(包含)开始,删除长度为3的字符串 * 执行方法之前:mString7 = @"RunRunIntoLove" * 执行方法之后:mString7 = @"RunIntoLove" */ [mString7 deleteCharactersInRange:NSMakeRange(3, 3)]; /** * 在字符串的后面追加字符串 * 执行方法之前:mString7 = @"RunIntoLove" * 执行方法之后:mString7 = @"RunIntoLoveYES" */ [mString7 appendString:@"YES"]; /** * 在字符串的后面追加格式化的字符串 * 执行方法之前:mString7 = @"RunIntoLoveYES" * 执行方法之后:mString7 = @"RunIntoLoveYES8" */ [mString7 appendFormat:@"%d",8]; /** * 为字符串重新设置值 * 执行方法之前:mString7 = @"RunIntoLoveYES8" * 执行方法之后:mString7 = @"YueWen" */ [mString7 setString:@"YueWen"]; /** * 将字符串中的某段字符串替换 * 表示将下标为3开始,长度为3的字符串 被 后面的替换掉 * 执行方法之前:mString7 = @"YueWen" * 执行方法之后:mString7 = @"YueRunIntoLove" */ [mString7 replaceCharactersInRange:NSMakeRange(3, 3) withString:@"RunIntoLove"]; return 0; }
//字符串与数据的应用
例如:
NSString *str = @"This is my OBjective-C Project!";
NSArray *arr = [str componentsSeparatedByString:@" "];//意思是用空格来分割字符串,并将值存入数组
NSString *str1 =[arr componentsJoinedByString:@" "];//意思是将数组用" "连接起来