NSString常用的简单的方法
NSString常用的简单的方法
miku酱啦~ 发表于10个月前
NSString常用的简单的方法
  • 发表于 10个月前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

NSString类

 

    NSString类的 对象 是用来 存储 OC字符串的

 

        NSString* str = @“南小鸟”;      

               @“南小鸟”;是快捷 创建了 一个NSString对象  将字符串 南小鸟 存入   并返回对象的地址

 

       格式控制符:   %p 打印指针变量的值( 也就是地址 )     %@ 打印指针指向的对象

 

 

 

NSString字符串的恒定性

 

    NSString* str = @“南小鸟”; 

                            这个 NSString对象 是存储在常量区( 数据段 )

 

    NSString* str = [ NSString stringWithFormate : @“南小鸟” ];   //formate  样式

    NSString* str = [ NSString new ];

                            这种方式创建的 NSString对象 是存储在 堆中

 

在内存中 用以上两种方式创建的 字符串对象   则这个字符串对象的 内容是无法更改的

                            对于 在常量区 和 堆 中的都这样

 

 

 

 

NSString* str = @“南小鸟”;        str = @“南大鸟”;

            在这里 并不是将原来 NSString对象的内容 更改为 @"南大鸟”   而是重新在 常量区中创建了一个NSString对象 内容为@“南大鸟”;

 

    对于NSString* str = [ NSString stringWithFormate : @“南小鸟” ];    也是一样 

 

 

这两种方法创建NSString字符串时是这样的

                                1),先在常量区/堆 中寻找有没有相同内容的 字符串          //不会垮区寻找 在那个区创建 就在那个区寻找

                                2), 如果有 则指针指向它    如果没有则在该区重新创建NSString对象  

 

储存在常量区中的数据在程序结束时才会回收;

 

 

 

 

 

 

 

 

 

 

NSString方法

 

    1),使用拼接的方式创建 1个NSString对象

 

    + (instancetype)stringWithFormat:(NSString *)format;

     

        NSString* str = @“南小鸟”;

        NSString* str1 =[ NSString stringWithFormate :@“大家好,我叫 %@“ , str ]

 

 

 

    2),得到字符串长度

        字符串长度是 NSString类中的属性

          @property (readonly) NSUInteger length;   //NSUInteger 其实是 unsigned long类型 

            所以可以通过 点语法 得到字符串的长度

        NSString* str =@“南小鸟”;             str.length;//这就表示这个字符串的长度

 

 

 

    3),得到字符串中指定下标的字符

        - (unichar)characterAtIndex:(NSUInteger)index;  //返回值是 unichar类型

            unichar ch = [ str characterAtIndex : 下标数 ];  

 

 

 

    4),判断两个字符串是否相同

            比较运算符 == 是用来判断 两个 数据 变量 指针  的值是否相等的

                NSString* str1=@“南小鸟”;          NSString* str2 = [ NSString stringWithFormate : @“南小鸟” ];

                        str1与str2 的字符串是相等的 但这两个指针的地址不相同 所以不能用 ==

                                            而且 ==不能用来判断两个对象是否相同  因为对象是OC中的 而==是C语言中的

 

    

    - (BOOL)isEqualToString:(NSString *)aString;

        BOOL res=[str isEqualToString:str1]   //返回值是BOOL类型

 

 

 

    5),将C语言字符串转化为OC字符串对象

 

    + (nullable instancetype)stringWithUTF8String:(const char *)nullTerminatedCString;

  

     char* c = “南小鸟”;

    NSString* str = [ NSString stringWithUTF8String : c ];

 

 

 

 

 

    6),将OC字符串转换为C语言字符串

 

            NSString字符串对象 有一个属性 就是它的C语言字符串

        @property (nullable, readonly) const char *UTF8String     //只读

 

        NSString* str =@“南小鸟”;

        const char* ch = str.UTF8String;   //这样就得到oc字符串str的C字符串 ch      //所以也要用const修饰的指针去接收

 

 

 

 

    7),将字符串内存写入到磁盘上的某1个文件之中  (对象方法)

 

    - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;

         对象方法

                        参数1,          path  将字符串写入文件的 文件路径

                        参数2,          useAuxiliaryFile    boll类型                                                                                                     //    auxiliary 英文 ->辅助的

                                                                         YES : 先将内容写入到1个临时文件中  如果成功 则将文件搬到指定目录 //    安全 效率低

                                                                         NO   : 直接将内容1写到指定文件                                                             //    不安全 效率高

 

                        参数3,            enc   NSStringEncoding类型        //是一个枚举 存放在 各种编码形式一般用 NSUTF8StringEncoding   

                        参数4,            error    NSError类型的 二级指针

                                                          如果写入成功  则这个指针指向 nil

                                                          如果写入失败 这个指针就会指向一个错误对象 这个对象记录发生错误消息              

                                                                                                                    这个错误对象 有个属性 localizedDescription属性 记录错误的简要信息

                                                                                                                            //localized  局部的     

                        返回值  BOOL类型  代表是否写入成功

                                                                                                                

 

             NSString* str=@“h h";
        NSError *error;
        BOOL b=[str writeToFile: @"/Users/yangshangda/Desktop/love live.txt" atomically:NO encoding:NSUTF8StringEncoding error:&error];   //别忘了指针前加&

                                                                          写入文件的路径                                                    直接写入                     使用UTF-8编码            记录错误的指针

 

 

 

 

 

    8),读取指定文件的字符   类方法

 

    + (nullable instancetype)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;    //content 内容

        参数1,    path 读取字符串的文件路径

        参数2,    enc   表示 读取字符串的编码类型 现阶段一般用 NSUTF8StringEncoding

        参数3,    error  二级指针 如果读取成功 则 指针的值为nil

                                               如果读取失败 则 指针指向对象存储 错误相关的信息

                                                                            对象的属性 localizedDescription 存储错误的简要信息

 

        NSString* str;
        NSError* error;
        str=[NSString stringWithContentsOfFile:@"/Users/yangshangda/Desktop/lovelive.txt"  encoding:NSUTF8StringEncoding  error:&error];

 

 

    9),使用URL读取字符串

URL :同一资源定位符  是对可以从互联网上得到的资源的位置和访问的一种简洁表示 是互联网上标准资源的地址.

 

        优势:    既可以读写 本地磁盘文件

                    还可以读写 网页文件 ftp服务器上的文件

 

 

 

        不同的类型的URL地址的写法

            1),本地磁盘文件:    file:// /Users/yangshangda/Desk/lovelive.txt

            2),网页地址:            http:// www.lovelive.cn/index.html

            3),ftp文件的地址     ftp:// server.itcast.cn/lovelive.txt

 

 

 

        将地址信息包装在1个NSURL对象中

            例如:   NSURL* url = [ NSURL URLWithString : @“file:///Users/yangshangda/Desk/lovelive.txt” ];                    //使用 类方法URLWithString :

 

 

 

    + (nullable instancetype)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;

        参数1,    url    包含地址信息的NSURL对象

        参数2,    enc    编码方式  一般用NSUTF8StringEncoding

        参数3,    error    二级指针  存储错误信息

 

 

    NSString* str;                 //NSString类型指针

     NSURL* u1=[NSURL URLWithString:@"http://www.lovelive.cn/index.html" ];        //储存地址信息的 NSURL对象 u1


   str=[NSString stringWithContentsOfURL:u1 encoding:NSUTF8StringEncoding error:nil ];

                                                                  NSURL对象        编码方式                    错误对象

 

 

 

 

    10),使用URL写入字符换       对象方法

    - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;
        参数1,    url 存储了地址信息的NSURL对象

        参数2,    useAuxiliaryFile    是否使用临时文件先存储内容

        参数3,    enc    编码方式    NUSUTF8StringEncoding

        参数4,    error    存储错误信息的 NSError对象

        返回值,    BOOL类型 表示是否写入成功 

 

    NSString* str=@"南小鸟

    NSError* error;

    NSURL* u1=[NSURL URLWithString:@"http://www.lovelive.cn/index.html" ];
    BOOL b=[str writeToURL:u1 atomically:NO encoding:NSUTF8StringEncoding error:&error];

 

 

 

 

    11),字符串间的比较

    - (NSComparisonResult)compare:(NSString *)string;            //comparison  比较

      

      NSComparisonResult是一个枚举   -1表示 小于   0代表 等于  1代表大于

    

          size_t =  [ str1 compare : str2 ]; //结果 可以用int类型来接   也可以使用 枚举NSComparisonResult来接

 

 

 

 

    12),字符串间的比较 //分类型比较

 

    - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;


       NSStringCompareOption //是一个枚举 可以选择比较的类型

typedef NS_OPTIONS(NSUInteger, NSStringCompareOptions) {        //NSStringCompareOption 表示了一些可选择的方式  有一些不同的方法都会使用它 只会用其中一部分
    NSCaseInsensitiveSearch = 1,        /* 忽略字符大小写进行比较 */    insensitive默然的
    NSLiteralSearch = 2, /* 完全匹配比较 */            literal逐字的 


    NSBackwardsSearch = 4, /* 搜索子字符串从后往前 搜索 子字符串*/    backwards向后的
    NSAnchoredSearch = 8, /* Search is limited to start (or end, if NSBackwardsSearch) of source string */


    NSNumericSearch = 64, /* Added in 10.2; 在OS.X10.2加入的 对 固定格式 字符串中的编号进行比较 如@“pho1001.jpg”  @“pho1002.jpg" */


    NSDiacriticInsensitiveSearch NS_ENUM_AVAILABLE(10_5, 2_0) = 128, /* If specified, ignores diacritics (o-umlaut == o) */
    NSWidthInsensitiveSearch NS_ENUM_AVAILABLE(10_5, 2_0) = 256, /* If specified, ignores width differences ('a' == UFF41) */
    NSForcedOrderingSearch NS_ENUM_AVAILABLE(10_5, 2_0) = 512, /* If specified, comparisons are forced to return either NSOrderedAscending or NSOrderedDescending if the strings are equivalent but not strictly equal, for stability when sorting (e.g. "aaa" > "AAA" with NSCaseInsensitiveSearch specified) */
    NSRegularExpressionSearch NS_ENUM_AVAILABLE(10_7, 3_2) = 1024    /* Applies to rangeOfString:..., stringByReplacingOccurrencesOfString:..., and replaceOccurrencesOfString:... methods only; the search string is treated as an ICU-compatible regular expression; if set, no other options can apply except NSCaseInsensitiveSearch and NSAnchoredSearch */
};

 

 

    13), 字符串是否以 某指定字符串开头或者结尾的

 

                //可以用来 判断 路径格式 和文件格式   如是否以 @“http//“开头    @“.mp3"结尾

            - (BOOL)hasPrefix:(NSString *)str;   //以指定字符串 开头
       - (BOOL)hasSuffix:(NSString *)str;   //以指定字符串 结尾

 

        BOOL b1 =[str hasPrefix str2];

              BOOL b2 =[str hasSuffix str2];

 

 

 

 

    14), 在主字符传中 搜索 子字符串

 

        - (NSRange)rangeOfString:(NSString *)searchString;    //从前往后搜索

        //NSRange 是一个定义的结构体

 

        NSString* str=@"南小鸟啦啦~";
        [str rangeOfString:@"”];    //在str字符串中 从前向后 搜索 @“南”;的位置

 

 

 

 

            typedef struct _NSRange {
                    NSUInteger location;        // 子字符串首个字符出现的 下标     integer 整数  NSInteger—> unsigned long
                    NSUInte length;             // 在主字符串中出现的 子字符的长度               

                                    } NSRange;           // 在主字符串中出现的 子字符的长度
     

          

            NSRange结构体 是Foundation框架中定义的1个结构体

            NSRange 声明初始化方式

        原始方式      NSRange ran;    ran.location=3;    ran.length=3;

                             NSRange ran = { 3,3 };

                             NSRange ran = { .location=3, .length=3 };

 

        利用Foundation函数        NSRange ran = NSMakeRange( location,len );           //利用 NSMakeRange函数 快速创建 range结构体

 

                                                 NSString* str = NSStringFromRange( ran );                //利用 NSStringFromRange函数 将range信息转化为字符处

                                                                                                                                            NSStringFrom….. 在from后面接 别的信息 可以将不同信息转换为字符串

 

 

 

        所以 当      NSRange.length=0 或者       NSRang.location为最大值( 也可以写成NSNotFound 后者NSInteger )        则表示主字符串中没有 子字符串

                                                            //在 Foundation/NSObjCRuntime.h 中            static const NSInteger NSNotFound = NSIntegerMax;

 

 

 

 

    15),在主字符串中 搜索子字符串 //分类型

 

    - (NSRange)rangeOfString:(NSString *)searchString options:(NSStringCompareOptions)mask;

                                                                                                         //  NSBackwardsSearch  表示从后往前搜索

      NSString* str=@"南小鸟啦啦~";
     NSRang ran=  [str rangeOfString:@"" options: NSBackwardsSearch];

 

 

 

 

    16), 字符串的截取

 

       - (NSString *)substringFromIndex:(NSUInteger)from;    把从指定的下标开始 到最后的子字符串 截取 
    - (NSString *)substringToIndex:(NSUInteger)to;        把从下标0开始 到指定下标的 子字符串 截取
    - (NSString *)substringWithRange:(NSRange)range;      把 指定范围(range)的 子字符串 截取

 

        NSString* str =@“ 南小鸟 ”;

        NSString* str1 = [ str substringFromIndex : 3 ];

        NSString* str2 = [ str substringToIndex : 3 ];

        NSString* str3 = [ str substringWithRange : NSMakeRange ( 3,3 ) ]

        

 

 

 

 

    17),字符串的替换

    - (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;//  occurrence 存在

                                                                                            被替换掉的字符串                          用来替换的字符串

 

    NSString* str =[ NSString stringWithFormate:@“我爱南大鸟” ];

    str = [ str stringByReplacingOccurrencesOfString :@“南大鸟” withString :@“南小鸟” ]; 

 

        这个方法还可以用来删除指定 子字符串  //也就是 把要删除的子字符串 替换为 @“”  ( 空字符串 )

 

 

 

    18), 字符串数据转换为其他的类型

                字符串对象 都有属性 就是它的其他数据类型的 格式

 

             @property (readonly) double doubleValue;    //double类型
        @property (readonly) float floatValue;      //float 类型  
        @property (readonly) int intValue;          //int类型  
        @property (readonly) NSInteger integerValue //NSInteger类型 也就是unsigned long 类型
        @property (readonly) long long longLongValue//long long 类型 0);
        @property (readonly) BOOL boolValue         //BOOL类型

 

            转换的时候 是从头开始 能转多少 就是多少  遇到不能转的就停止转换 要是开头就不能转换 则表现为0 ( 二进制补码为0 )

            

 

    19), 对字符串中 前后字符进行操作

        - (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set;    //trimming 边角料

                                                                                        这里输入NSCharacterSet类的属性 来进行不同的操作    

 

 

 

            NSString* str =[ NSString stringWithFormate : @“南小鸟” ];

            str=[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
            // 上面 表示 去除掉 字符串str 前后的 空格

 

        NSCharacterSet 是一个 NSObject的子类  遵守<NSCopying, NSMutableCopying, NSSecureCoding>这些协议

               这个类有以下这些属性

              @property (readonly, class, copy) NSCharacterSet *controlCharacterSet;
        @property (readonly, class, copy) NSCharacterSet *whitespaceCharacterSet;            //去掉字符串前后的 空格
        @property (readonly, class, copy) NSCharacterSet *whitespaceAndNewlineCharacterSet;
        @property (readonly, class, copy) NSCharacterSet *decimalDigitCharacterSet;
        @property (readonly, class, copy) NSCharacterSet *letterCharacterSet;
        @property (readonly, class, copy) NSCharacterSet *lowercaseLetterCharacterSet;        //去掉字符串前后小写字符
        @property (readonly, class, copy) NSCharacterSet *uppercaseLetterCharacterSet;        //去掉字符串小写字母    
        @property (readonly, class, copy) NSCharacterSet *nonBaseCharacterSet;
        @property (readonly, class, copy) NSCharacterSet *alphanumericCharacterSet;
        @property (readonly, class, copy) NSCharacterSet *decomposableCharacterSet;
        @property (readonly, class, copy) NSCharacterSet *illegalCharacterSet;
        @property (readonly, class, copy) NSCharacterSet *punctuationCharacterSet;
        @property (readonly, class, copy) NSCharacterSet *capitalizedLetterCharacterSet;
        @property (readonly, class, copy) NSCharacterSet *symbolCharacterSet;
        @property (readonly, class, copy) NSCharacterSet *newlineCharacterSet                                 

    

 

 

    20),对字符串 进行大小写的转换

        NSString类 有以下属性 分别存储着 字符串的大写 小写 形式

                若字符串不是英文字符 则不转换 保持原样

 

 

        @property (readonly, copy) NSString *uppercaseString;    //大写形式
        @property (readonly, copy) NSString *lowercaseString;    //小写形式

 

 

    21),去掉头尾 指定的字符串

        NSString* str=“南小鸟”;

      str= [str stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@""]];

                                                                                                                                        characterSetWithCharacterInString : 是NSCharacterSet的类方法

                                                                                                                                            + (NSCharacterSet *)characterSetWithCharactersInString:(NSString *)aString;

 

 

 

 

共有 人打赏支持
粉丝 0
博文 1
码字总数 2909
×
miku酱啦~
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: