ios学习总结--常用的字符串操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios学习总结--常用的字符串操作相关的知识,希望对你有一定的参考价值。
本文总结一下我们常用的字符串的基本操作,在此与大家分享学习。
1.字符串的创建以及初始化
- string:方法:创建字符串
NSString *str1 = [NSString string]; str1 = @"Test1";
- stringWithstring:方法:用字符串来创建字符串
1 NSString *str2 = [NSString stringWithString:str1];
-
UTF8String:方法:NSString转换成C字符串
NSString *str2 = [NSString string]; str2 = @"Test1"; printf("%s",[str2 UTF8String]);
- stringWithCstring:方法:根据C字符串创建字符串
NSString *str3 = [NSString stringWithCString:[str2 UTF8String] encoding:NSUTF8StringEncoding];
- stringWithFormat:方法:创建NSLog()格式的字符串(格式化输出)
NSString *str4 = [NSString stringWithFormat:@"str4-->%@",str3]; NSLog(@"%@",str4);
- stringWithContentsOfFile:方法:将创建的字符串赋值为指定文件的内容
1 NSError *error; 2 3 NSString *textFileContents = [NSString stringWithContentsOfFile:@"/Users/donghao/Desktop/ios学习/iOS字符串的处理/字符串知识点总结/字符串知识点总结/myTxt.txt" encoding:NSUTF8StringEncoding error:&error]; 4 5 NSLog(@"%@",textFileContents);
- stringWithContentsOfURL:方法:将创建字符串赋值为url的内容
1 NSURL *url = [NSURL URLWithString:@"http://blog.csdn.net/samuelltk/article/details/7349140"]; 2 3 NSString *pageContent = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 4 5 NSLog(@"%@",pageContent);
注:iOS9苹果将原http协议改成了https协议的方法,所以这里我们需要在info.plist文件中添加key
1 <key>NSAppTransportSecurity</key> 2 <dict> 3 <key>NSAllowsArbitraryLoads</key> 4 <true/> 5 </dict>
- stringWithUTF8String:方法:将创建的字符串转换为UTF8字符串
1 char *str ="abc"; 2 3 NSString *nsStr = [NSString stringWithUTF8String:str]; 4 5 NSLog(@"%@",nsStr);
相对应的init方法就不在此做对应的代码示例了。
注:常用的替换符
%@ NSString实例
%d,%D,%i 整数
%u,%U 无符号整数
%x 将无符号整数以十六进制小写字母显示
%X 将无符号整数以十六进制大写字母显示
%f 小数
%c 字符
%s C语言字符串
%% 显示%字符本身
2.字符串的判断和比较
- isEqualTostring:方法:比较字符串是否相等
1 NSString *str1 = @"test1"; 2 3 NSString *str2 = @"test1"; 4 5 NSString *str3 = @"test3"; 6 7 if ([str1 isEqualToString:str2]) { 8 9 NSLog(@"str1 isEqualToString str2"); 10 }else if ([str2 isEqualToString:str3]) { 11 12 NSLog(@"str2 isEqualToString str3"); 13 }
- hasPrefix:方法:判断字符串是否以某个字符开始
NSString *str3 = @"test1"; if ([str3 hasPrefix:@"te"]) { NSLog(@"yes"); }
- hasSuffix:方法:判断字符串是否以某个字符结束
NSString *str3 = @"test3"; if ([str3 hasSuffix:@"t3"]) { NSLog(@"yes"); }
- compare:方法:比较字符串的大小
1 - (NSComparisonResult)compare:(NSString *)string; 2 - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask; 3 - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange; 4 - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale;
1 if ([str1 compare:@"test"] == NSOrderedSame) { 2 3 NSLog(@"yes"); 4 } 5 else { 6 NSLog(@"no"); 7 }
注:字符串的比较这里是有一个陷阱的,也是开发中新手常犯的错误之一。
上面的代码看着是没有什么问题的,很常见的比较方式,但是如果如上中的str1为nil,根据OC的消息调用规则(方法调用),对nil发送的任何消息,得到的返回都是nil。这样的情况下,运行时是不会像C/C++那样,出现空指针的非法访问而使得程序强行终止。也就是说,即便str1为nil,也不会造成程序崩溃,而是会继续运行。
那么当str1为空的时候,[str1 compare:@"some text"] 消息的返回就会为nil。nil表示一个空的OC对象,实际就是表示一个空指针,而它代表的值就是0,与NSOrderedSame的值相等. 如此,回到最前面的if语句,如果str1为nil,那么整个语句的值为真。这会给程序造成非常严重的问题,小则逻辑错误,UI显示错误等,大则会造成数据泄漏等问题。所以在比较的时候需要先对str1进行不为nil判断。
1 NSString *str1 = @"test1"; 2 NSString *str2 = @"test2"; 3 4 //NSOrderedSame判断两者内容是否相同 5 if (str1 != nil && [str1 compare:str2] == NSOrderedSame) { 6 7 NSLog(@"end"); 8 }
1 NSString *str1 = @"test1"; 2 NSString *str2 = @"test2"; 3 4 //NSOrderedAscending判断两对象值的大小(按字母顺序进行比较,str2大于str1为真) 5 if (str1 != nil && [str1 compare:str2] == NSOrderedAscending) { 6 7 NSLog(@"end"); 8 }
注:这里按照字母顺序比较的是对应的ACSII码值
1 NSString *str1 = @"wtest1"; 2 NSString *str2 = @"test2"; 3 4 //NSOrderedDescending判断两对象值的大小(按字母顺序进行比较,str2小于str1为真) 5 if (str1 != nil && [str1 compare:str2] == NSOrderedDescending) { 6 7 NSLog(@"end"); 8 }
- caseInsensitiveCompare:方法:不考虑大小写的比较大小
1 NSString *str1 = @"Test1"; 2 NSString *str2 = @"test1"; 3 4 //NSCaseInsensitiveSearch:不区分大小写比较 5 //NSLiteralSearch:进行完全比较,区分大小写 6 //NSNumericSearch:比较字符串的字符个数,而不是字符值 7 if (str1 != nil && [str1 compare:str2 options:NSCaseInsensitiveSearch] == NSOrderedSame) { 8 9 NSLog(@"end"); 10 }
3.字符串大小写的转换
- uppercaseString:方法:小写字母转为大写字母
NSString *str1 = @"test"; NSString *str2 = [str1 uppercaseString]; NSLog(@"%@",str2);
- lowercaseString:方法:大写字母转为小写字母
NSString *str1 = @"TEST"; NSString *str2 = [str1 lowercaseString]; NSLog(@"%@",str2);
- capitalizedString:方法:将每个单词的首字母大写
NSString *str1 = @"test"; NSString *str2 = [str1 capitalizedString]; NSLog(@"%@",str2);
4.字符串的连接,插入和删除
- stringByAppendingString:
stringByAppendingFormat: appendString:
appendFormat:方法:符串后面增加一个新字符串NSString *str1 = @"Test1"; NSString *str2 = @"Test2"; NSString *str3 = [str1 stringByAppendingString:str2]; NSString *str4 = [str2 stringByAppendingFormat:@"%d%d",10,20]; NSLog(@"%@\n%@",str3,str4); //appendString方法只能用于可变字符串 NSMutableString *str5 = [NSMutableString string]; [str5 appendString:@"Test1"]; [str5 appendString:@"Test2"]; [str5 appendString:@"Test3"]; NSLog(@"%@",str5);
- + (void)insertString:(NSString *)string atIndex:方法:从index位置插入字符串
NSMutableString *string = [NSMutableString stringWithString:@"test"]; [string insertString:@"iOS" atIndex:4]; NSLog(@"%@",string);
- + (void)deleteCharactersInRange:(NSRange)range:方法:删除字符串
NSMutableString *string = [NSMutableString stringWithString:@"Test123"]; //按照索引选择删除一个范围内的字符 [string deleteCharactersInRange:NSMakeRange(1,3)]; NSLog(@"%@",string);
5.字符串的截取
- substringToIndex:方法:返回字符串开头至index位的字符串 不包含索引位
- substringFromIndex:方法:返回字符串第index位至末尾的字符串 包含索引位
- substringWithRange:方法:返回字符串中范围range内的字符串 包含索引位
NSString *string = @"Test12345"; //返回字符串开头至index位的字符串 不包含索引位 NSString *str1 = [string substringToIndex:4]; //返回字符串第index位至末尾的字符串 包含索引位 NSString *str2 = [string substringFromIndex:4]; //返回字符串中范围range内的字符串 包含索引位 NSString *str3 = [string substringWithRange:NSMakeRange(1, 3)];
6.字符串的检索
- rangeOfString:方法:如果找到就返回范围,否则NSRange的location项被设置为NSNotFound
NSString *string = @"hello world"; NSRange range1 = [string rangeOfString:@"hello"]; //NSCaseInsensitiveSearch 不区分字母大小写 //NSLiteralSearch 对字符串进行字节单位的比较,一般可提高检索速度 //NSBackwardsSearch 从范围的末尾开始检索 //NSAnchoredSearch 仅检索制定范围的前部。忽略字符串中间的检索字符 NSRange range2 = [string rangeOfString:@"he" options:NSCaseInsensitiveSearch]; if(range1.location != NSNotFound) { NSLog(@" location=%lu,length=%lu",range1.location,range1.length); }
以上是关于ios学习总结--常用的字符串操作的主要内容,如果未能解决你的问题,请参考以下文章