标签:
本文总结一下我们常用的字符串的基本操作,在此与大家分享学习。
NSString *str1 = [NSString string]; str1 = @"Test1";
1 NSString *str2 = [NSString stringWithString:str1];
UTF8String:方法:NSString转换成C字符串
NSString *str2 = [NSString string]; str2 = @"Test1"; printf("%s",[str2 UTF8String]);
NSString *str3 = [NSString stringWithCString:[str2 UTF8String] encoding:NSUTF8StringEncoding];
NSString *str4 = [NSString stringWithFormat:@"str4-->%@",str3]; NSLog(@"%@",str4);
1 NSError *error; 2 3 NSString *textFileContents = [NSString stringWithContentsOfFile:@"/Users/donghao/Desktop/iOS学习/iOS字符串的处理/字符串知识点总结/字符串知识点总结/myTxt.txt" encoding:NSUTF8StringEncoding error:&error]; 4 5 NSLog(@"%@",textFileContents);
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>
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语言字符串
%% 显示%字符本身
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 }
NSString *str3 = @"test1"; if ([str3 hasPrefix:@"te"]) { NSLog(@"yes"); }
NSString *str3 = @"test3"; if ([str3 hasSuffix:@"t3"]) { NSLog(@"yes"); }
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 }
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 }
NSString *str1 = @"test"; NSString *str2 = [str1 uppercaseString]; NSLog(@"%@",str2);
NSString *str1 = @"TEST"; NSString *str2 = [str1 lowercaseString]; NSLog(@"%@",str2);
NSString *str1 = @"test"; NSString *str2 = [str1 capitalizedString]; NSLog(@"%@",str2);
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);
NSMutableString *string = [NSMutableString stringWithString:@"test"]; [string insertString:@"iOS" atIndex:4]; NSLog(@"%@",string);
NSMutableString *string = [NSMutableString stringWithString:@"Test123"]; //按照索引选择删除一个范围内的字符 [string deleteCharactersInRange:NSMakeRange(1,3)]; NSLog(@"%@",string);
NSString *string = @"Test12345"; //返回字符串开头至index位的字符串 不包含索引位 NSString *str1 = [string substringToIndex:4]; //返回字符串第index位至末尾的字符串 包含索引位 NSString *str2 = [string substringFromIndex:4]; //返回字符串中范围range内的字符串 包含索引位 NSString *str3 = [string substringWithRange:NSMakeRange(1, 3)];
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); }
标签:
原文地址:http://www.cnblogs.com/iOSClub/p/5240000.html