NSString常用的类方法


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

instancetype作为返回值 代表返回的是当前这个类的对象。

  • 作用:将c语言的字符串转换为oc语言的字符串。
int main(int argc, const char * argv[]) {
    char *str0 ="rose";
    NSString *str1 =[NSString stringWithUTF8String:str0];
	//转换为c语言字符串
	const char *s=str0.UTF8String;
    NSLog(@"str1 = %@",str1 );

    return 0;
}

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

  • 作用:拼接字符串
    NSString *str = [NSString stringWithFormat:@"大家好,我叫%@,我今年%d岁",name,age];
    NSLog(@"str = %@",str);

最常用的对象方法

  1. length方法,返回字符串的字符个数,可以处理中文
    NSString *str5 = @"hello";
    NSUInteger len = [str5 length];//也可用点语法
    NSLog (@"len = %lu",len);
  1. 获得字符串中指定下标的字符
   unichar ch =[str6 characterAtIndex:2];
  NSLog(@"ch = %c",ch);
//返回值是unichar,占2字节,输出要用%C,写C。
  1. 判断两个字符串的内容是否相同
  • 不要用==去判断两个字符串是否相等
  • 判断相等的方式 [str1 isEqualToString: str2]
  1. 比较两个字符串大小
    NSString *st1 = @"china";
    NSString *st2 = @"japan";
	//也可以用int接,因为返回值是一个枚举
    NSComparisonResult res = [st1 compare: st2];
    NSLog(@"res= %d",res);
	//如果返回值是-1,小
						//0,等于
					 	//1,大于
  1. 将字符串内存携入到磁盘上的某一个文件之中
        [str writeToFile:/*写入文件的路径值(url地址)*/
        atomically:/*yes是先写一个临时文件如果成功再写入,no直接写入(推荐)*/
        encoding:NSUTF8StringEncoding/*使用utf-8编码*/
        error:&err.localizedDescription/*二级指针,要传递一个NSError指针的地址
		这个指针的值为nil代表写入成功*/]

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

  1. 从磁盘上的文件中读取文件中的内容
        [NSString stringWithContentsOfFile:(nonnull NSString *) encoding:(NSStringEncoding) error:<(NSError *__autoreleasing  _Nullable * _Nullable)]
  1. 使用URL来读写字符串数据
  • 本地磁盘文件的写法:file:///xxx/xxx.txt
  • ftp文件地址的写法: ftp://xxx
        //获取网页内容
        NSURL *ui=[NSURL URLWithString:@"http://www.baidu.com"];
        NSString *str1=[NSString stringWithContentsOfURL:ui encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"%@",str1);
		        //写入数据
        NSString *str4 = @"啦啦啦";
        BOOL res = [str4 writeToURL:ui atomically:NO encoding:NSUTF8StringEncoding error:nil];
    }

  1. 字符串比较
     NSComparisonResult res2 = [str compare:str1 options:NSCaseInsensitiveSearch/*忽略大小写*/];
        switch (res2) {
            case NSOrderedAscending:
                NSLog(@"小");
                break;
            case NSOrderedSame:
                NSLog(@"一样大");
                break;
            case NSOrderedDescending:
                NSLog(@"大");
            default:
                break;
        }
  1. 判断字符串是否以指定字符串开头
BOOL res = [str1 hasPrefix: 想要的开头]
  1. 结尾
BOOL res = [str1 hasPrefix: 想要的结尾]
  1. 在主串中搜索子串(从前往后搜索)

        NSRange range= [str rangeOfString:子串   /*options:NSBackwardsSearchcho从后往前搜索*/];
		//表示子串出现的下标
	NSLog(@"loc = %lu",range.location);
	//代表子串在主串中匹配的长度
	NSLog(@"loc = %lu",range.length);
	      if(range.location ==NSNotFound)
        {
            NSLog(@"没找到")
        }
        else
        {
            NSLog(@"找到了")
        }
  1. NSRange结构体
  • 是foundation框架中定义的一个结构体,这个结构体变量一般情况下龙来表示一段范围
  1. 声明并创建一个NSrange结构体
  • 最原始方法
NSRange range;
range.location = 3;
range.length = 4;
  • 第二种方式
NSRange range = {3,7}
  • 第三种方式
NSRange range={.location = 3,.length = 4};
  • 第四种方式
NSMakeRange(loc,len);
//转换为NSString
NSLong(@"%@",NSStringFromRange(ran));
  1. 字符串的截取
//从第0个开始截取指定的个数
        NSString *NS =[str substringToIndex:3];
		//从指定下标截取到最后
        NSString *NS1 =[str substringFromIndex:3];
		//截取指定的一段范围
        NSString *NS2 =[str substringWithRange:NSMakeRange(2,3 )];
  1. 字符串的替换
  //删除就替换为空
        str= [str stringByReplacingOccurrencesOfString:@"被替换的内容" withString:@"要替换的内容"];
  1. 字符串的类型转换
//从头开始转换,能转换多少是多少
int num =str.intValue;
  1. 去掉字符串的前后空格
//去掉字符串前后空格,中间无法去掉
str =[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
//转换为大写字母
str =[str uppercaseString];
//转换为小写字母
str =[str lowercaseString];
  1. NSMutableString
  • 不会新创建对象,直接修改字符串数据。
  • 使用
NSMutableString *str6 = [NSMutableString string];
//直接追加字符串
     [str6 appendString:@"jack"];
	  //拼接方式追加
       [str6 appendFormat: ];
  • 创建NSMutableString对象的时候,记住下面这样的初始化方法是不行的
 NSMutableString *str =@"jack"

@"jack"是一个NSString对象,是一个父类对象。而str指针是一个NSMutableString类型的,是一个子类类型的,如果通过子类指针去调用子类独有的成员,就会运行错误。

  • NSMutableString从NSString继承,在使用NSString的地方安全可以使用NSMutableString。

NSArray数组

  1. 特点
  • 只能存储OC对象,任意的OC对象
  • 长度固定,一旦NSArray数组创建完毕之后,元素的长度固定,无法新增,无法删除元素
  • 每一个元素都是紧密相连的,每一个元素仍然有自己的下标。
  • 元素的类型是id类型
  1. 创建
  • 因为这是个类,所以当然就是创建NSArray对象
//nil代表元素结束
 NSArray *arr= [NSArray arrayWithObjects:@"a", @"b",nil];
  1. 创建NSSArray的简要方式
//不用写nil
 NSArray *arr=@ [@"a", @"b"];
  1. NSArray的使用
  • 使用%@可以直接输出所有元素对象
  1. 取出元素
  • 通过下标
NSLog(@“%@”,arr[0]);
  • 调用数组对象的对象方法来取出指定下标元素的值。
     NSString *str12 =[arr objectAtIndex:1];
  1. 其他方法
//计数个数
arr.count;
//判断是否有这个元素
BOOL res=[arr containsObject:@"a"];
//取到第一个元素(可以取空)
arr.firstObject
//取到最后一个元素
arr.lastObject
//查找元素第一次出现的下标
NSUInteger index = [arr indexOfObject:@"rose"];
  1. NSArray数组的遍历
  • 使用for循环
  • 使用增强for循环
for(元素类型 变量名 in 数组名)
{
	直接通过变量名就可以拿到数组中的每一个元素
}
  • 当NSArray数组中存储的数据的类型不一致的时候,迭代变量的类型建议使用id类型
for(id 变量名 in 数组名)
{
	直接通过变量名就可以拿到数组中的每一个元素
}
     [arr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
	 	//obj代表遍历出来的元素的值,idx代表遍历出来的元素的下标,如果希望停止遍历把stop指针指向的值改为YES
            NSLog(@"%@",obj);
        }];
  1. NSArray与字符串的两种方法
  • 将数组中的元素连接起来组成一个新的字符串
//#为连接符
       NSString *str =[arr componentsJoinedByString:@"#"];
        NSLog(@"%@",str);
  • 将字符串以指定的分隔符分成一个数组,每一部分就是数组的一个元素。
NSArray *arr =[str componentsSeparatedByString:@","];
  1. NSMutableArray数组(是NSArray的子类)
  • 可以动态的更新和删除
  • NSArray数组一旦创建,其元素的个数就固定,无法新增删除,NSMutableArray数组,元素可以新增可以删除,其他用法和父类一样。
  • 创建
//第一种
       NSMutableArray *arr6 =[NSMutableArray new];
		//第二种
       NSMutableArray *arr5 =[NSMutableArray arrayWithObjects:@"jack",@"ss", nil];
  • 任意的指针其实可以指向任意的对象,编译器不会报错,只会给一个警告。

  • 虽然语法上可以乱指,但千万别乱指,因为运行的适合可能出错。当我们调用指针特有的方法就可能出错。

  • 如何添加元素

[arr5 addObject:@"jack"];
//这个元素和之前数组为同级元素,所以一共有2组数据
[arr5 addObject:arr];
//在数组内插入
    [arr5 addObjectsFromArray:arr] ;
//指定下标插入
 [arr5 insertObject:@"lilei" atIndex:1];
 //删除指定下标
  [arr5 removeObjectAtIndex:1];
  //删除指定名称
    [arr5 removeObject:@“lili”];
	//删除指定范围内的元素
	   [arr5 removeObject:@"lili" inRange:NSMakeRange(0,3)];
	   //删除最后一个元素
	    [arr5 removeLastObject];
		//删除所有
		[arr5 removeAllObject];
  1. 如何存储基本数据类型
        NSNumber *num1 =[NSNumber numberWithInt:10];
		//简写
        NSNumber *num2 =@20;
		int num =10;
		//变量要加()
		NSNumber *n1 =@(num);
		//可以用@添加
        NSArray *ar = @[num1,num2,@30];
        for (NSNumber *num in ar) {
            NSLog(@"%d",num.intValue);
        }
学习