天天看点

黑马程序员-OC-Foundation-NSString

——- ios培训、ios培训、期待与您交流! ———-

NSString是什么

NSString是Foundation框架里面的NSObject的一个子类.

这里学习的主要是Foundation中的一些函数和这个类中已经封装好的一些方法,重点罗列了几个比较常用的方法和函数.

NSString用法

1.直接创建方式:

NSString *str = @"abc";
           
  1. 格式化创建:
NSString *st2 = [NSString stringWithFormat:@"%@", @"jack"];//这种方式创建的字符串存储在堆区
NSString *str = [[NSString alloc] initWithFormat:@"My age is %d", ];//这种方式创建的字符串存储在常量区
           

3.文本编码:

中文 :GBK(3个字节) GB2312(3个字节)

UTF - 8:国际通用编码(2个字节)

  1. 字符串写入文件:
//这里使用的就是UTF-8文本编码
[str writeToFile:@"/Users/zhaoxiaohu/Desktop/" atomically:YES  encoding:NSUTF8StringEncoding error:&err];
           

5.字符串从文件读取:

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

6.字符串比较函数:

NSComparisonResult result = [str1 compare:str2 options:NSCaseInsensitiveSearch|NSNumericSearch];

返回值:NSOrderedAscending(str1<str2)
NSOrderedDescending(str1>str2)
NSOrderedSame(str1 = str2)
           
  1. 判读字符串是否相等:
  1. 检测字符串前后缀:
NSURL *url=[NSURL URLWithString:@"http://www.itcase.com"];
[url hasPrefix:@"http://"]; 字符串是否以http://开头
[imgName hasSuffix:@"com"]; 检测字符串是否以.com结尾
           

9.从一个字符串中找到另一个字符串的位置:

range是一个结构体,上面方法返回的是str1在str2中的位置和所占长度.

10.字符串的截取

NSString *str = @"http://www.baidu.com";

    //1) 从xx位置开始,到最后结束(包含xx这个位置的字符)
    NSString *str1 = [str substringFromIndex:];
    NSLog(@"str1 = %@",str1);


    //2) 从开始位置,到xx位置结束(不包含xx这个位置)
    NSString *str2 = [str substringToIndex:];
    NSLog(@"str2 = %@",str2);


    //3) 截取一个范围 range
    NSRange r1 = {,};
    NSString *str3 = [str substringWithRange:r1];
    NSLog(@"str3 = %@",str3);
           

11.字符串的替换

NSString *str =@"asdfsdafasdfdasdfsa";
NSString *newStr = [str stringByReplacingOccurrencesOfString:@"a" withString:@"*"];
           

以上是把str字符串中”a”换成”*”

12.OC的字符串和 C的字符串互相转换问题

) C---->OC对象
    char *s = "zhangsanfeng";
    printf("%s\n",s);
    //思路:创建一个OC的字符串对象,用C语言的字符串创建
    NSString *str = [NSString stringWithUTF8String:s];
    NSLog(@"str = %@",str);

    //2) OC对象 --> C的字符串
    NSString *str2 = @"zbz";
    // 把str2 转 C的字符串
    const char *s1 = [str2 UTF8String];
           

关于NSString的一些思考

1.NSString直接创建的字符串都是不可变的,上面方法中有替换方法,本质上是在常量去重新创建一个新的字符串,然后把新的字符串的地址重新赋给原来字符串的指针.

2.NSString类中包含很多方法,有的是类方法,有的是对象方法,当方法,类方法由类调用,对象方法由对象调用.

3.NSString创建的字符串是一个对象,是char* 类型.

NSMutableString

NSMutableString是NSString的一个子类,可以创建可变的字符串.

它可以使用NSString中所有的方法.

可变的字符串的意思就是:这个字符串所在的空间可以不固定,可以往这块空间里面增加或者减少元素.

NSMutableString几个特有的方法

1.创建一个可变的空字符

NSMutableString *str3 = [NSMutableString string];
           
  1. appendFormat 格式化的添加字符串
[str appendFormat:@"http://www.baidu.com/%d",];
           
  1. 删除字符串一部分内容

4.插入一个字符串

[str insertString:@"p://" atIndex:];
           

5.替换字符串的一部分内容

[str replaceCharactersInRange:NSMakeRange(, ) withString:@"itcast"];
           

关于NSMutableString的几点思考

1.NSMutableString创建的是可变的字符串,这个字符串的空间可变

2.NSMutableString str=@”abc”;这种创建方式是错误的,这种创建方式默认的是创建了一个不可变的字符串,显然不符合逻辑.

3.NSMutableString对字符串操作时空间大小可以改变,而空间的位置没有变,NSString在对字符串操作的时候,本质上是一个不断创建新字符串的过程,只不过是用指针不断指向不同的空间而已.