A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#pragma mark -04-NSString的常用方(2)

1. 字符串的比较.

    - (NSComparisonResult)compare:(NSString *)string;

2. 指定选项的比较.

    1). 忽略大小写的比较.

         NSString *str1 = @"jack";

         NSString *str2 = @"JACK";

         int len =  [str1 compare:str2 options:NSCaseInsensitiveSearch];

    2). 完全匹配的比较.

         NSString *str1 = @"jack";

         NSString *str2 = @"JACK";

         int len =  [str1 compare:str2 options: NSLiteralSearch];

    3). 比较字符串中的数字的大小.

         NSString *str1 = @"img100021.jpg";

         NSString *str2 = @"img100012.jpg";

         int len =  [str1 compare:str2 options: NSNumericSearch];

        比较的是字符串中数组的大小.

        使用前提: 两个字符串的格式要相同.一般情况下用来比较两个路径

3. 判断字符串是否以指定的字符串开始的.

    - (BOOL)hasPrefix:(NSString *)str;

4. 判断字符串是否以指定的字符串结束的.

    - (BOOL)hasSuffix:(NSString *)str;

5. 在字符串中搜索子字符串的范围.

    @"i love rose";

    @"love"

    范围: 起始下标是:2 长度: 4

    - (NSRange)rangeOfString:(NSString *)searchString

    返回值代表子字符串在主串中的范围.

    返回值是个NSRange 这是1个结构体.

     typedef struct _NSRange {

        NSUInteger location;

        NSUInteger length;

     } NSRange;

     location:  代表这段范围的起始下标.

     length: 代表匹配的长度.

     如果在主串中没有找到子串. 返回的NSRange结构体变两的length的值就是0.location的值就是NSUInteger的最大值.

     所以,如果我们要判断是否在主串中找了子串.

     1). 判断返回的NSRange结构体的length是否为0

     2). 也可以判断location的值是否为最大值.NSNotFound就代表它的最大值.

     如果找到的情况下:

     location的值 是第一次匹配到的下标.

     length的值就是子串的长度.

     @"jack"

6. NSRange

    1). 这是我们Foundation框架中定义的一个结构体.   

    2). 这个结构体变量用来表示1个范围.

        一般情况下,用来表示子串在主串中的范围.

        location: 起始下标

        length: 匹配到的长度.

        @"我爱黑马程序员!"

        @"黑马"

        location:2

        length: 2

    3). NSRange结构体变量的初始化.

        a. 最简单的初始化.先声明结构体变量.再初始化属性.

             NSRange range;

             range.location = 2;

             range.length = 3;

        b.  NSRange range = {2,3};

        c.  NSRange range = {.location = 2, .length = 3};

        d. Foundation框架提供了1个函数来快速的创建1个NSRange结构体变量.

            NSRange range =  NSMakeRange(2, 3);

        e. 将NSRange结构体变量转换为字符串的.

             NSRange range =   NSMakeRange(2, 3);

             NSString *str =  NSStringFromRange(range);

             NSLog(@"str = %@",str);

7. 字符串的截取

    @"我爱黑马程序员!"

     从指定的下标开始一直截取到最后

     - (NSString *)substringFromIndex:(NSUInteger)from;

     截取前面指定个数的字符串.

     - (NSString *)substringToIndex:(NSUInteger)to;

     截取指定的范围的字符串.

     - (NSString *)substringWithRange:(NSRange)range;

8. 字符串的替换.

    @"我很爱很爱你"; 将字符串中的 爱 换成 恨

    - (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement

    注意的是: 各种操作字符串的方法.原来字符串本身不会变.因为字符串的恒定性.

             最终的操作结果都是以返回值返回来的.

    还可以实现删除的效果: 将指定的字符串换成@""

9. 字符串的类型转换.

     将字符串数据转换为别的类型.

     @property (readonly) double doubleValue;

     @property (readonly) float floatValue;

     @property (readonly) int intValue;

     @property (readonly) NSInteger integerValue;

     @property (readonly) long long longLongValue;

     @property (readonly) BOOL boolValue;

     如果字符串中的数据不完全是这个要转换的类型.

     从头开始,能转换多少就是多少.

10.  删除字符串前后的空格.

        NSString *str = @"   chiwcniwnciwe  c winciwn ciewnciewc   fcneivbcnei      ";

        str =  [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

        只能删除前后的空格,中间的空格如果要删除就是以替换.

我对你的要求:

1). 不需要把所有的方法都记住. 但是几个重要的方法是要记住的.

     其他的方法呢? 要做到有印象.

#pragma mark -05-NSMutableString的使用


1. 当我们使用NSString去大批量的拼接字符串的时候.

    每拼接1次,就会创建1个新的字符串对象.

    大批量拼接的时候,效率就会很低下.

    一定要理解为什么效率这么低下.

    因为每拼接1次,都要重新的创建1个对象.而创建对象本身就是很耗性能的.

    何况你创建那么多.

2. 在实际的项目中,我们肯定会遇到这样的场景.

    大批量的字符串拼接.如果还像上面那样拼接肯定是不行的.

    希望: faster 快一些.

    上面之所以慢: 是因为NSString对象不可变.每次追加原来的字符串对象不会改变,而是新创建1个字符串对象.

    我们妄想: 如果字符串对象可以改变.存储在对象中的字符串可以改变,那么这样的话.

             每次拼接就不需要创建新的对象,直接修改原来的对象,这样效率就会高很多.

3. NSMutableString

    1). 是Foundation框架中的1个类. 从NSString继承.

        所以,NSMuatbleString也是用来存储字符串数据的. 因为他的爹爹是NSString

        所以,NSString的功能NSMuatbleStrin通通都有

    2). NSMutableString相对于NSString做的扩展.

        存储在NSMutableString对象中的字符串数据具备可变性.存储在其中的字符串数据可以改.

        存储在NSString对象中的字符串数据是不可以更改的.

4. NSMutableString的创建.

    1) 这是1个类,要使用它的话.当然是需要创建对象.

         NSMutableString *str1 = [NSMutableString new];

         NSMutableString *str2 = [[NSMutableString alloc] init];

         NSMutableString *str3 = [NSMutableString string];

    2). 注意:

        NSMutableString *str1 = @"jack";

        这样的写法是错误的.

        @"jack"是1个NSString对象.str1是1个子类指针.

        如果通过这个指针调用子类独有的方法的时候,就会运行报错.

    3). 如何往NSMutableString对象中存储字符串数据.

        将字符串追加存储到NSMutableString对象中

        - (void)appendString:(NSString *)aString;

        以拼接的方式追加.

        - (void)appendFormat:(NSString *)format, ...

    4). 特别强调.

        往NSMutableString对象中追加数据,直接就是改的这个对象的内容.

        不会创建1个新的对象.

5. 使用NSMutableString做大批量的字符串拼接.

    这个时候效率就很高了.

    为什么? 因为NSMutableString对象至始至终都只有1个.

           每次拼接的时候,都是直接修改的这个对象,没有新创建对象. 所以效率很好

6. 什么时候使用NSMutableString?

    NSString: 效率高. 不拼接的时候. 同1个字符串对象,如果后面要用. 就不会再创建了.

              大批量拼接效率低


    NSMutableString: 只要alloc new都是1个新的对象.

              优点:大批量拼接的时候效率高.


    我们平时还是使用NSString.

    当我们要做大批量的字符串拼接的时候,才使用NSMutableString

    超过7次的拼接.

7. 在使用NSString的地方也可以使用NSMutableString

    因为NSMutableString:NSString

8. 将可变字符串对象转换为不可变的字符串对象.

    调用可变字符串对象的copy方法 就返回1个NSString对象.


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马