今天来给大家介绍一下 Foundation 框架关于字符串的使用方法,方法比较多,功能介绍我都写在代码里了。好了不多说了,上代码
我们来建立一个新的类 StringTest
我们来声明一下 StringTest.h
#import <Foundation/Foundation.h> @interface StringTest : NSObject + (void) test; @end
#import <Foundation/Foundation.h> #import "StringTest.h" int main(int argc, const char * argv[]) { @autoreleasepool { //类方法: //类方法(静态方法),程序运行之初,该方法就已经分配内存空间,类方法是属于公共空间之中的。 //对象方法: //对象方法,在调用时才进行压栈处理。 [StringTest test];//静态方法按照类名直接调用 } return 0; }
重点来了,下面我们来进行StringTest.m的实现,我在代码中都做了详细的注释,在这里我就不多赘述了。我们来看一下不可变字符串的用法
#pragma mark - 不可变字符串创建 /** 不可变字符串创建 */ + (void)createString { //NSString 不可变是指字符串的内容和长度不可变 //1.对不可变对象进行默认初始化是没有意义的 NSString *string = [[NSString alloc] init];//没有意义 NSLog(@"%p: %@",string,string); NSLog(@"%lu",[string length]); //2.这是创建不可变字符串最简化的方式 //首先分配空间,然后把字符串存入,最后返回空间地址 string = @"hello world";//重新创建了内存空间 NSLog(@"%p: %@",string,string); /* 运行结果: 22016-01-04 10:09:12.187 字符串的使用[899:32212] StringTest 2016-01-04 10:09:12.189 字符串的使用[899:32212] 0x7fff794b7bd0: 2016-01-04 10:09:12.189 字符串的使用[899:32212] 0 2016-01-04 10:09:12.189 字符串的使用[899:32212] 0x100001098: hello world */ //系统不建议这样使用 //NSString *string2 = [[NSString alloc] initWithString:@"hello world"]; //OC字符串使用的是享元设计模式,可以节省内存资源 //享元模式:字符串创建比较消耗内存资源,当创建一个字符串时,系统会把其放入缓冲区,下次使用相同的字符串常量时时无需再次创建新的对象 NSString *string2 = @"hello world"; NSLog(@"%p: %@",string2,string2);//如果两个字符串相等,则两个地址相等 NSString *string3 = @"hello"; NSLog(@"%p: %@",string3,string3);//两个字符串不相等,则地址不相等 const char * cString = "utf-8 String"; //3.C字符串 转 OC字符串 string2 = [[NSString alloc] initWithCString: cString encoding: NSUTF8StringEncoding]; //使用类方法来创建对象时,可以省去alloc string2 = [NSString stringWithCString: cString encoding: NSUTF8StringEncoding]; //4.格式化字符串 string2 = [[NSString alloc] initWithFormat:@"%@年%d月%d日",@"2016",1,4]; NSLog(@"%@",string2); //字符串的拼接 NSString *str1 = @"www."; NSString *str2 = @"baidu.com"; NSString *str3 = [NSString stringWithFormat:@"%@%@",str1,str2]; NSLog(@"str3 %@",str3); //格式化initWithFormat:是不会从字符串缓冲区中进行存取的 //string2 = [[NSString alloc] initWithFormat:@"%@",@"hello"]; string2 = @"hello"; NSLog(@"%p: %@",string2,string2); NSString *string6 = [[NSString alloc] initWithFormat:@"%@",@"hello"]; NSLog(@"%p: %@",string6,string6); }
** 字符串的拼接和分割 */ #pragma mark - 字符串的拼接和分割 + (void)appendSeparatedString { //字符串的拼接 //不可变字符串拼接后,会把新的字符串地址返回 NSString *string = @"www."; //The string to append to the receiver. This value must not be nil. string = [string stringByAppendingString:@"baidu.com"];//传入的参数一定不能为空 NSLog(@"string : %@",string); string = [string stringByAppendingString:@“百度网站"]; NSLog(@"string :%@",string); //字符串的分割 NSArray *components = [string componentsSeparatedByString:@"."]; NSLog(@"%@",components); //按两个以上字符进行分割 //从给定的字符串中读取字符,存入字符集和,以.和- 进行分割 NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@".-"]; components = [string componentsSeparatedByCharactersInSet:set]; NSLog(@"%@",components); //获取子串 string = @"www.baidu.com"; //索引值从0开始,截取子串 NSString *subString = [string substringFromIndex:4]; NSLog(@"substring: %@",subString); /** * 2016-01-04 14:25:35.811 字符串的使用[3816:108976] substring: baidu.com */ //不包含索引值对应的字符 subString = [string substringToIndex:4];//注意,不要越界 NSLog(@"substring: %@",subString); /** * 2016-01-04 14:28:41.554 字符串的使用[3833:109957] substring: www. */ //从location位置开始往后数 length长度的字符 subString = [string substringWithRange:NSMakeRange(4, 9)]; NSLog(@"substring: %@",subString); /** *运行结果: *2016-01-04 14:31:34.492 字符串的使用[3846:110549] substring: baidu */ //获取字符串的范围 NSRange range = [string rangeOfString:@"com"]; NSLog(@"location = %lu, length = %lu",range.location,range.length);//注意,这个.是结构体中的 // location = 14, length = 3 }
//** 字符串的比较方法*/ #pragma mark - 字符串的比较方法 + (void)compareString { NSString *string1 = @"hello"; NSString *string2 = @"hello"; //比较的是地址 if (string1 == string2) { NSLog(@"相等"); }else { NSLog(@"不相等"); } //直接比较是对对象地址进行的判断,不是判断对象本身 NSString *string3 = [NSString stringWithFormat:@"%@",@"hello"]; if (string1 == string3) { NSLog(@"相等"); }else { NSLog(@"不相等"); } //判断两个字符串相等 isEqualToString //hello //1.先判断地址是否相同,如果不同,执行第二步 //2.判断长度是否一样,如果相同,执行3 //3.逐个字符进行比较 if ([string1 isEqualToString:string3]) { NSLog(@"相等"); }else { NSLog(@"不相等"); } //2.字符串的比较 //不要在OC字符串中添加 "\0" string1 = @"abccc"; string3 = @"ba"; //根据字符的ASCII码来进行对比。从第一个字符开始,如果相等,比较下一个,如果不相等,返回比较结果 //如果长度小的字符串中的字符,和长度大中的字符前几个都相同,最后比较结果,就是按长度来进行对比 NSComparisonResult result = [string1 compare:string3]; switch (result) { case NSOrderedAscending: NSLog(@"string1 < string3"); break; case NSOrderedSame: NSLog(@"string1 = string3"); break; case NSOrderedDescending: NSLog(@"string1 > string3"); break; default: break; } //面试中 //通过字符串比较方法来判断两个字符串对象是否相同 string1 = nil; string3 = @"baidu"; //为什么这里不用判断string3 为nil 。 /** This value must not be nil. If this value is nil, the behavior is undefined and may change in future versions of OS X. */ if (string1 && [string1 compare:string3] == NSOrderedSame) { NSLog(@"相同"); }else { NSLog(@"不同"); } // NSLog(@"%ld",(long)[string1 compare:string3]); }
#pragma mark - 其他的一些方法 + (void)otherMethods { NSString *string = @"www.baidu.com"; NSLog(@"length = %lu",string.length); NSLog(@"Upper: %@",string.uppercaseString);//全部转化为大写 NSLog(@"Lower: %@",string.lowercaseString);//全部转化为小写 NSLog(@"Capitalized: %@",string.capitalizedString);//首字母大写 BOOL result = [string hasPrefix:@"www."];//是否包含前缀 BOOL result1 = [string hasSuffix:@".com"];//是否包含后缀 //以后详细讲这个方法 [string getCharacters:nil range:NSMakeRange(0, 0)]; }
+ (void)mutableString { // NSMutableString 父类都是 NSString // 可变指的是内存空间本身是可以更改的 // 1.创建一个空的可变字符串 NSMutableString *string = [NSMutableString string]; //string = @"123";//这是创建不可变字符串的方式 [string setString:@"可变字符串"]; //setString:每次赋值都会对原值进行全部覆盖 [string setString:@"123"]; // 2.插入字符串 [string insertString:@"可变字符串" atIndex:1]; // 3.在末尾追加字符串 [string appendString:@"-baidu.com"]; // 4.删除操作 //删除给定范围的字符 [string deleteCharactersInRange:[string rangeOfString:@"23"]]; //删除所有的字符 //[string setString:@""]; // 5.修改字符串 //1可变字符串-baidu.com //将 - 修改为 www. [string replaceCharactersInRange:NSMakeRange(6, 1) withString:@"www."]; //注意:如果给定的范围长度要大于替换字符串的长度时,后面多出的部分会进行删除(先删除再插入) [string replaceCharactersInRange:NSMakeRange(6, 6) withString:@"www."]; NSLog(@"string: %@",string); }
#import "StringTest.h" @implementation StringTest +(void)test { NSLog(@"%@",self); //[self createString]; //[self appendSeparatedString]; //[self compareString]; //[self otherMethods]; //NSString *string = @“cuixuerui”; //NSLog(@"%@",[string reverse]); [self mutableString]; } @end
没关系,小崔哥来教你,写 5 遍就可以了!如假包换,童叟无欺!