码迷,mamicode.com
首页 > 移动开发 > 详细

ios学习总结--常用的字符串操作

时间:2016-03-03 21:21:36      阅读:355      评论:0      收藏:0      [点我收藏+]

标签:

本文总结一下我们常用的字符串的基本操作,在此与大家分享学习。

1.字符串的创建以及初始化

  1. string:方法:创建字符串
    NSString *str1 = [NSString string];
        
    str1 = @"Test1";
  2. stringWithstring:方法:用字符串来创建字符串
    1 NSString *str2 = [NSString stringWithString:str1];
  3. UTF8String:方法:NSString转换成C字符串

    NSString *str2 = [NSString string];
    
    str2 = @"Test1";
    
    printf("%s",[str2 UTF8String]);
  4. stringWithCstring:方法:根据C字符串创建字符串
    NSString *str3 = [NSString stringWithCString:[str2 UTF8String] encoding:NSUTF8StringEncoding];
  5. stringWithFormat:方法:创建NSLog()格式的字符串(格式化输出)
    NSString *str4 = [NSString stringWithFormat:@"str4-->%@",str3];
        
    NSLog(@"%@",str4); 
  6. 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);
  7. 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>
  8. 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.字符串的判断和比较

  1. 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     }

     

  2. hasPrefix:方法:判断字符串是否以某个字符开始
    NSString *str3 = @"test1";
    
    if ([str3 hasPrefix:@"te"]) {
            
            NSLog(@"yes");
        }

     

  3. hasSuffix:方法:判断字符串是否以某个字符结束
    NSString *str3 = @"test3";
    
    if ([str3 hasSuffix:@"t3"]) {
            
            NSLog(@"yes");
        }

     

  4. 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     }
  5. 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.字符串大小写的转换

  1. uppercaseString:方法:小写字母转为大写字母
        NSString *str1 = @"test";
        
        NSString *str2 = [str1 uppercaseString];
        
        NSLog(@"%@",str2);

     

  2. lowercaseString:方法:大写字母转为小写字母
        NSString *str1 = @"TEST";
        
        NSString *str2 = [str1 lowercaseString];
        
        NSLog(@"%@",str2);

     

  3. capitalizedString:方法:将每个单词的首字母大写
        NSString *str1 = @"test";
        
        NSString *str2 = [str1 capitalizedString];
        
        NSLog(@"%@",str2);

     

4.字符串的连接,插入和删除

  1. 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);

     

  2.  + (void)insertString:(NSString *)string atIndex:方法:从index位置插入字符串
        NSMutableString *string = [NSMutableString stringWithString:@"test"];
        
        [string insertString:@"iOS" atIndex:4];
        
        NSLog(@"%@",string);

     

  3.  + (void)deleteCharactersInRange:(NSRange)range:方法:删除字符串 
        NSMutableString *string = [NSMutableString stringWithString:@"Test123"];
        
        //按照索引选择删除一个范围内的字符
        [string deleteCharactersInRange:NSMakeRange(1,3)];
        
        NSLog(@"%@",string);

5.字符串的截取

  1. substringToIndex:方法:返回字符串开头至index位的字符串 不包含索引位
  2. substringFromIndex:方法:返回字符串第index位至末尾的字符串 包含索引位 
  3. 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.字符串的检索

  1. 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学习总结--常用的字符串操作

标签:

原文地址:http://www.cnblogs.com/iOSClub/p/5240000.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!