OC不可变字符串和可变字符串(1)

在OC中,字符串有:不可变字符串(NSString)、可变字符串(NSMutableString)。
可变字符串的方法继承于不可变字符串。

可变字符串

1.初始化一个字符串对象(除以下方法外,还可以使用alloc init来初始化字符串)

NSString *string1 = @"Gene";
//stringWithFormat可用于字符串的顺序拼接
NSString *string2 = [NSString stringWithFormat:@"%@ %@ %@",@"1",@"2",string1];

2.使用NSString的类方法来创建字符串
2.1从文件夹中获取字符串

//先创建一个文件路径path1
NSString *path1 = @"/Users/Gene/Desktop/hello.html";
//参数一输入文件路径 encoding是编码(此处直接输入国家编号)error 当无法通过路径名搜索到文件时,进行报错。
NSString *string5 = [NSString stringWithContentsOfFile:path1 encoding:NSUTF8String Encoding error:nil];

输出结果:OC不可变字符串和可变字符串(1)_第1张图片
2.2从网页获取字符串

NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
NSString *string6 = [NSString stringWithContentsOfURL:url encoding:4 error:&error];

2.3字符串的操作
2.3.1截取字符串

//创建一个字符窜
NSString *string7 = @"life is simple,You make choices and don't look back";
//获取字符串的长度
NSUInteger length = string7.length;
//substringToIndex,从截取位置为0-4的字符,但不包括5
NSString *subString1 = [string7 substringToIndex:5];
//截取字符串中从7(from)的位置到结尾的字符串,包括from的位置
 NSString *subString2 = [string7 substringFromIndex:7];
 //截取从位置3开始,长度为6的字符窜
NSString *subString3 = [string7 substringWithRange:NSMakeRange(3, 6)];

/*------------------------*/
//获取字符串中的某个字符
NSString *string8 = @"abcdefg";
//根据字符串中的位置index来获得一个字符,注意:字符串的索引是从 0 开始
char c =[string8 characterAtIndex:7];

2.3.2字符串的比较
比较两个字符串,判断这两个字符串是否相等
ex:subString2 == subString3。其中,使用“==”判断时,需要等号两边的字符串的内容以及指针都相同。
通过浅拷贝,可以得出一个指针相同且内容相同的另一个字符串:

NSString *subString4 = [NSString stringWithString:subString2];

相对的,通过深拷贝,则可以得出一个只是内容相同,指针都不相同的字符串:

NSString *subString5 = [NSString stringWithFormat:subString2];

浅拷贝中,两个字符串是会互相影响的。而深拷贝相当于重新克隆出一个字符串,其指针发生了改变,而内容来源于上一个字符串,且相互不影响。
比较两个字符串(在实际开发中,通常只需要比较两个字符串的内容是否相等):

if ([subString2 isEqualToString:string4]) {
            NSLog(@"subString2 与 subString4 内容相等");
        }
        else{
            NSLog(@"subString2 与 subString4 内容不相等");
        }

比较两个字符串的大小,注意是大小

//创建两个字符串
NSString *cmpString1 = @"hehehe";
NSString *cmpString2 = @"haha";
//compare,比较字符串1和字符串2,返回的是枚举类型
NSComparisonResult result = [cmpString1 compare:cmpString2];
switch (result) {
   case NSOrderedAscending:{
      NSLog(@"cmpString1 < cmpString2 ,升序");
          break;
         }
   case NSOrderedSame:{
      NSLog(@"cmpString = cmpString 相同");
           break;
         }
   case NSOrderedDescending:{
       NSLog(@"cmpString1 > cmpString2 ,降序");
          break;
          }
        default:
          break;
  }

2.3.3根据字符串拿到对应的range(location,length)

NSRange range = [string7 rangeOfString:@"simple"];

输出结果:这里写图片描述
如果被搜索字符窜在该字符窜中有多个,那么,只输出第一个遇到该字符窜的位置以及该字符串的长度。
2.3.4判断字符串中是否有xx前缀 或者 xx后缀

//判断前缀
 NSString *string12 = @"http://www.baidu.com";

        if ([string12 hasPrefix:@"http://"]) {
            NSLog(@"含有此前缀");
        }
        else{
            NSLog(@"不含有此前缀");
        }
//判断后缀
NSString *string13 = @"xxxxxx.jpg";
        if ([string13 hasSuffix:@"jpg"] || [string13 hasSuffix:@"png"]) {
            NSLog(@"是图片文件");
        }
        else{
            NSLog(@"不包含此后缀");
        }

2.3.4字符串的拼接

  NSString *string14 = @"www.baidu.com";
  //在字符串前拼接 
  NSString *string15 = [@"http://" stringByAppendingString:string14];

  NSLog(@"%@",string15);

  NSString *string16 = @"http://static.bigstockphoto.com";

  NSString *string17 = @"images/homepage/2016_popular_photo_categories.jpg";
  //连接两个字符串,并且第二个字符串是按一定格式传进来的
  NSString *string18 = [string16 stringByAppendingFormat:@"/%@",string17];
  //如果要拼接的是文件夹,可以使用stringByAppendingPathComponent
  NSString *string19 = [string16 stringByAppendingPathComponent:string17];

2.3.5字符串的其他常用方法

//1.字符串的转换函数
        NSString *str = @"111addd333";
        //如果字符串里面有数字也有字母,会将字母之后的全部砍掉
        int a1 = [str intValue];
        NSLog(@"%d",a1);

        //2.字符串的大小写转换
        NSString *str2 = @"aaaabbsssee";
        //全部改成小写
        str2 = [str2 uppercaseString];
        NSLog(@"%@",str2);
        //全部改成大写
        str2 = [str2 lowercaseString];
        NSLog(@"%@",str2);
        //首字母大写,其他小写
        str2 = [str2 capitalizedString];
        NSLog(@"%@",str2);


        //替换
        str2 = [str2 stringByReplacingOccurrencesOfString:@"bb" withString:@"dd"];
        NSLog(@"%@",str2);
        //替换
        str2 = [str2 stringByReplacingCharactersInRange:NSMakeRange(1, 2) withString:@"GGGGG"];
        NSLog(@"%@",str2);

        //以separator 为分隔符,将元字符窜内容进行分割,分割得到的结果放到一个数组里面,作为返回值
        NSString *str8 = @"aa-bb-cc-dd-ee";
        NSArray *arry = [str8 componentsSeparatedByString:@"-"];

你可能感兴趣的:(OC不可变字符串和可变字符串(1))