zoukankan      html  css  js  c++  java
  • OC-字符串函数

    Object-C作为当前iOS开发的最热门的语言,是iOS开发的先决条件

    本博客主要解释了OC中的字符串函数。

    OC和C语言的区别:

    NSString:创建不可变字符串对象的类

    NSMutableString:创建可变字符串对象的类

     

    OC语言完全兼容C语言

     

    OC字符串与C语言字符串区别

    1.OC字符串是一个字符串对象,字符串常量需要用@""包含

    2.C语言字符串""包含

    3.C语言的字符串以字符的ascll码形式存储

    4.OC中的字符串以uicode编码(万国码)形式存储

    细分:UTF-8(多字节编码,使用最多)  UTF-16  UTF-64

    打印字符串的占位符不同:打印oc%@,C语言中用%s

    1.字符串的初始化函数:

    解释:在OC中每创建一个字符串对象都是需要对该字符串对象进行初始化的,以下代码中简单的介绍了10种对字符串对象初始化的方法,其中分为两种,一种是对象方法初始化(都是以initXXX()命名的方法),一种是类方法初始化( 都是以stringXXX()命名的方法 )。

    NSString不可变字符串对象是不能被修改的,它是创建在堆内存中的。在该类中一些字符串操作函数,看似对字符串对象做了修改,其实是系统底层重新生成了一个字符串对象,并修改生成的字符串,所以说:原来的字符串是没有被修改的。

    一个简单的记忆方法:凡事以(NSString *)作为返回值的函数都是在底层重新生成了一个NSString对象的。

     1 /* 字符串初始化常用函数汇总  */
     2 int main(int argc, const char * argv[]) {
     3     @autoreleasepool {
     4         //@"hello world"是一个常量字符串对象,存储在常量区,不可以被修改
     5         NSString *str1 = @"hello world";
     6         NSLog(@"str1 = %@",str1);
     7         
     8         
     9         //用对象的方法来创建格式化 一定格式字符串对象
    10         NSString *strFormat = [[NSString alloc] initWithFormat:@"%s%d%@" ,"hello",123,@"world"];
    11         NSLog(@"strFormat = %@",strFormat);
    12         
    13         //用类方法创建格式化的字符串对象
    14         NSString *strFormat1 = [NSString stringWithFormat:@"%s%d%@","hello",123,@"qianfeng"];
    15         NSLog(@"strFormat1 = %@",strFormat1);
    16         
    17         //用给定的字符串对象创建字符串对象
    18         NSString *str4 = @"中国教育";
    19         NSString *str5 = [[NSString alloc] initWithString:str4];
    20         NSLog(@"str5 = %@",str5);
    21         
    22         //用C的字符串创建OC的字符串对象:转换了UTF-8存储的编码格式
    23         NSString *str6 = [[NSString alloc] initWithUTF8String:"我是C的字符串"];
    24         NSLog(@"str6 = %@",str6);
    25         
    26         //用C的字符串创建OC的字符串对象,并且设置编码格式
    27         NSString *str7 = [[NSString alloc] initWithCString:"我是C的字符串" encoding:NSUTF8StringEncoding];
    28         NSLog(@"str7 = %@",str7);
    29         
    30         //通过类方法创建一个空的字符串   ?autorelease:用类方法创建字符串对象是否可以自动释放内存空间
    31         NSString *str8 = [NSString string];
    32         NSLog(@"str8 = %@",str8);
    33         
    34         //通过累对象创建一个空的字符串  <===> str8
    35         NSString *str9 = [[NSString alloc] init];
    36         NSLog(@"str9 = %@",str9);
    37         
    38         //和initWithString 相对应 : 用一个已经存在的字符串对象来创建一个新的字符串对象
    39         NSString *str10 = [NSString stringWithString:str5];
    40         NSLog(@"str10 = %@",str10);
    41         
    42         //和initWithUTF8String相对应
    43         NSString *str11 = [NSString stringWithUTF8String:"我是C语言的字符串"];
    44         NSLog(@"str11 = %@",str11);
    45         
    46         //和initWithCString:encoding方法相对应
    47         NSString *str12 = [NSString stringWithCString:"Cyu言的字符串" encoding:NSUTF8StringEncoding];
    48         NSLog(@"str12 = %@",str12);
    49     }
    50     return 0;
    51 }
    View Code

    字符串对象初始化总结:

    /*

     总共5种常用的字符串初始函数:分别对应了类函数形式和对象函数两种形式

     特别的:指向常量的OC字符串对象

     1.创建一个空的字符串对象

     2.创建一个一定格式的字符串对象

     3.通过一个已经存在字符串对象来创建一个新的字符串对象

     4.通过C语言字符串来创建一个以UTF-8编码格式的字符串对象

     5.通过C语言字符串来创建一个OC的字符串对象,并且可以设置对应的编码格式

     */

     

    2.常用的字符串操作函数

      1 /* 字符串常用操作函数  */
      2 int main(int args,const char *argv[])
      3 {
      4     @autoreleasepool {
      5         //NSString
      6         //创建一个不可变的字符串对象
      7         //NSMutableString
      8         //创建可变字符串对象的类
      9         
     10         //求字符串长度
     11         NSString *str1 = @"hello world 前锋";
     12         NSUInteger length = [str1 length]; //typedef unsigned long NSUInteger;
     13         NSLog(@"length = %lu",length);
     14         
     15         //获取字符串指定位置的字符
     16         unichar ch = [str1 characterAtIndex:1];  //unichar : unsigned short
     17         NSLog(@"ch = %C",ch);//%C打印unichar字符 %c打印ASCLL字符
     18         
     19         
     20         /*
     21             子字符串提取方法
     22          */
     23         //从下标位置开始提取子串,到字符串末尾
     24         NSString *subStr1 = [str1 substringFromIndex:12];
     25         NSLog(@"subStr1 = %@",subStr1);
     26         
     27         //提取字符串从开始位置到指定位置(不包括指定下标)
     28         NSString *subToStr1 = [str1 substringToIndex:12];
     29         NSLog(@"sbuToStr1 = %@",subToStr1);
     30         
     31         
     32         //NSRange是一个结构体,结构体中存放了两个变量,分别是location:字符串开始位置,length:提取长度 (这样就构成了一个提取字符串的范围)
     33         NSRange range = {6,5};
     34         NSString *subRangeStr = [str1 substringWithRange:range];
     35         NSLog(@"subRangeStr = %@",subRangeStr);
     36         
     37         //NSMakeRange(location,length) 返回一个结构体变量
     38         NSString *subRangeStr1 = [str1 substringWithRange:NSMakeRange(2, 12)];
     39         NSLog(@"subRangeStr1 = %@",subRangeStr1);
     40         
     41         
     42         /*
     43             字符串比较函数
     44          */
     45         NSString *str2 = [NSString stringWithCString:"hello world" encoding:NSUTF8StringEncoding];
     46         NSString *str3 = [NSString stringWithUTF8String:"helLo world"];
     47         NSComparisonResult result = [str2 compare:str3];
     48         if (result == NSOrderedAscending) {
     49             NSLog(@"str2 < str3");
     50         }else if (result == NSOrderedSame)
     51         {
     52             NSLog(@"str2 = str3");
     53         }else{
     54             NSLog(@"str2 > str3");
     55         }
     56         
     57         //caseInsensitiveCompare:以大小写不敏感的方式比较字符串
     58         //NSComparisonResult:是一个枚举类型
     59         NSComparisonResult res2 = [str2 caseInsensitiveCompare:str3];
     60         if (res2 == NSOrderedSame) {
     61             NSLog(@"str2 = str3");
     62         }else if(res2 == NSOrderedAscending)
     63         {
     64             NSLog(@"str2 < str3");
     65         }else{
     66             NSLog(@"str2 > str3");
     67         }
     68         
     69         /*
     70             - (BOOL)isEqualToString:(NSString *)aString;
     71          
     72             - (BOOL)hasPrefix:(NSString *)aString;
     73             - (BOOL)hasSuffix:(NSString *)aString;
     74          */
     75         BOOL ret = [str2 isEqualToString:str3];
     76         if (ret == YES) {
     77             NSLog(@"isEqualToString str2 = str3");
     78         }else{
     79             NSLog(@"isEqualToString str2 != str3");
     80         }
     81         
     82         //判断前缀子串
     83         BOOL ret1 = [@"www.baidu.com" hasPrefix:@"www"];
     84         NSLog(@"ret1 = %d",ret1);
     85         //判断后缀子串
     86         BOOL ret2 = [@"www.baidu.com" hasSuffix:@".com"];
     87         NSLog(@"ret2 = %d",ret2);
     88         
     89         //是否包含子串(10.10mac os)
     90         bool ret3 = [@"www.baidu.com" containsString:@"baidu"];
     91         NSLog(@"ret3 = %d",ret3);
     92         
     93         
     94         
     95         //查找子串
     96         //如果不能查找到子串,则返回一个long类型的最大的值
     97         //rangeOfString:是从左往右进行查找,
     98         NSString *str4 = [[NSString alloc] initWithFormat:@"%s","hello world qianworldfeng"];
     99         NSRange range1 = [str4 rangeOfString:@"world"];
    100         if (range1.location == NSNotFound) {
    101             NSLog(@"没有查找到子串 notfound = %lu",NSNotFound);
    102         }else{
    103             NSLog(@"location = %lu length = %lu",range1.location,range1.length);
    104         }
    105         
    106         //倒序查找子串
    107         NSRange range2 = [str4 rangeOfString:@"world"  options:NSBackwardsSearch];
    108         NSLog(@"location = %lu length = %lu",range2.location,range2.length);
    109         
    110         
    111         /*
    112             凡事返回值为 NSSring * 的,底层都是创建了一个新的对象
    113          */
    114         
    115         //字符串追加
    116         NSString *str5 = @"hello"; //常量字符串是不能修改的
    117         NSLog(@"地址 str5 = %p",str5);
    118         //不是在原来str5上追加的,而是在底层创建了一个新的字符串
    119         str5 = [str5 stringByAppendingString:@" world"]; //创建了一个新的字符串对象
    120         NSLog(@"新地址 str5 = %p",str5);
    121         NSLog(@"str5 = %@",str5);
    122         
    123         //格式化追加字符串
    124         NSString *str6 = @"qianfeng";
    125         str6 = [str6 stringByAppendingFormat:@"%d%s",123,"hello world"];
    126         NSLog(@"str6 = %@",str6);
    127         
    128         
    129         //把字符串对象转换成相应的类型对象 例如:字符串类型转称int
    130         int a = [@"123" intValue];
    131         float f = [@"123.123" floatValue];
    132         NSLog(@"a = %d f = %.3f",a,f);
    133         
    134         
    135         //返回公共前缀子串
    136         NSString *str7 = [@"www.baidu.com" commonPrefixWithString:@"www.hao123.com" options:NSLiteralSearch];
    137         NSLog(@"str7 = %@",str7);
    138         
    139         
    140         //大小写转换
    141         NSString *str8 = [@"baidu" uppercaseString]; //小写转大写
    142         NSLog(@"str8 = %@",str8);
    143         NSString *str9 = [@"BAIdu" lowercaseString]; //大写转小写
    144         NSLog(@"str9 = %@",str9);
    145         NSString *str10 = [@"bai du" capitalizedString]; //每个单词的首字母转换成大写
    146         NSLog(@"str10 = %@",str10);
    147     
    148         
    149         //字符串替换
    150         NSString *str11 = [@"baidu qianfengqian" stringByReplacingOccurrencesOfString:@"qian" withString:@"QIAN"];
    151         NSLog(@"str11 = %@",str11);
    152     
    153         //将OC的字符串对象转换成C语言的字符串
    154         NSLog(@"我是C字符串:%s",[@"woshiduixiang" UTF8String]);
    155         
    156         
    157         //替换指定范围内的字符 重要
    158         NSString *str12 = @"hello world qianfeng";
    159         str12 = [str12 stringByReplacingCharactersInRange:NSMakeRange(12, 8) withString:@"welcome"];
    160         NSLog(@"str12 = %@",str12);
    161         
    162         
    163         //利用一个网址内的所有内容生成一个OC的字符串对象
    164         NSURL *url = [[NSURL alloc]initWithString:@"https://www.baidu.com/"];
    165         //利用网址
    166         NSString *urlContent = [[NSString alloc]initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; //nil空指针
    167         NSLog(@"urlContent = %@",urlContent);
    168         
    169         NSString *fileContent = [NSString stringWithContentsOfFile:@"/Users/qianfeng/Desktop/Calculator/Calculator/Calculator.c" encoding:NSUTF8StringEncoding error:nil];
    170         NSLog(@"fileContent = %@",fileContent);
    171         
    172     }
    173 }
    View Code

    3.可变字符串NSMutableString是继承于不可变字符串NSString的,所以NSSting类中的所有函数,NSMutableString都是可以使用的。

    NSMutableString类中所独有的几个操作函数

     1 int main(int args,const char *argv[])
     2 {
     3     @autoreleasepool {
     4         
     5         //- (NSMutableString *)initWithCapacity:(NSUInteger)capacity;
     6         //+ (NSMutableString *)stringWithCapacity:(NSUInteger)capacity;
     7         //创建一个可变字符串对象 并初始化大小位20个字节
     8         NSMutableString *mulStr1 = [[NSMutableString alloc]initWithCapacity:20];
     9         NSLog(@"mulStr1 = %@",mulStr1);
    10         
    11         
    12         NSMutableString *mulStr2 = [[NSMutableString alloc]initWithString:@"hello world qianfeng"];
    13         [mulStr2 replaceCharactersInRange:NSMakeRange(6, 5) withString:@"welcome"];
    14         NSLog(@"mulStr2 = %@",mulStr2);
    15         
    16         
    17         //在指定位置增加字符串
    18         NSMutableString *mulStr3 = [[NSMutableString alloc]initWithString:@"前锋中国"];
    19         [mulStr3 insertString:@"hello" atIndex:2];
    20         NSLog(@"mulStr3 = %@",mulStr3);
    21         
    22         //删除指定范围的字符
    23         NSMutableString *mulStr4 = [[NSMutableString alloc]initWithString:@"前锋中国"];
    24         [mulStr4 deleteCharactersInRange:NSMakeRange(1, 2)];
    25         NSLog(@"mulStr4 = %@",mulStr4);
    26         
    27         
    28         //追加字符串
    29         NSMutableString *mulStr5 = [[NSMutableString alloc]initWithUTF8String:"woshiC字符串"];
    30         [mulStr5 appendString:@"我是zhuijia的"];
    31         NSLog(@"mulStr5 = %@",mulStr5);
    32         
    33         //格式化追加字符串
    34         NSMutableString *mulStr6 = [NSMutableString stringWithString:@"我是dobi"];
    35         [mulStr6 appendFormat:@"%s%d","123",999];
    36         NSLog(@"mulStr6 = %@",mulStr6);
    37         
    38         //重置字符串
    39         NSMutableString *mulStr7 = [NSMutableString stringWithFormat:@"%s%d","haha",998];
    40         [mulStr7 setString:@"我是更改的"];
    41         NSLog(@"mulStr7 = %@",mulStr7);
    42     }
    43 }
    View Code
  • 相关阅读:
    定时器
    按键中断部分的理解
    初中数学
    WING IDE 快捷键
    机器学习各种网址
    SQL With As 用法Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
    Python编码格式导致的csv读取错误
    Oracle中的rownum 和rowid的用法和区别
    oracle配置
    matplotlib命令与格式:标题(title),标注(annotate),文字说明(text)
  • 原文地址:https://www.cnblogs.com/BeyondAverage0908/p/4568046.html
Copyright © 2011-2022 走看看