14.Object-C--浅谈Foundation框架字符串NSString 与NSMutableString

 

    

  OC的字符串时经常使用到的,今天我对于OC字符串做一个简单的总结,如果有错误之处,麻烦留言指正。感谢!

  NSString是一个不可变长度的字符串对象。表示它初始化以后,你不能改变该变量所分配的内存中的值,但你可以重新分配该变量所处的内存空间。

  下面就从字符串NSString的创建开始说起:

  1.创建一个NSString类型的字符串有三种方法:

  

1     //1.直接赋值
2     NSString *s1 = @"age is 26";
3     //2.使用实例方法初始化
4     NSString *s2 = [[NSString alloc]initWithFormat:@"age is %d",26];
5     //3.使用类方法
6     NSString * s6 = [NSString stringWithUTF8String:"QYMa"];
7     NSString *s7 = [NSString stringWithFormat:@"age is %d",26];

  这里面需要注意的一点是,看下面的代码:

1    //新版本的SDK已经不推荐使用此方法创建NSString,可以直接常量赋值
2     //Using 'stringWithString:'with a literal is redundant
3     NSString *s8 = [NSString stringWithString:@"QYMa"];

  2.字符串的转化

(1).将C语言中的字符串转化为OC字符串 :initWithUTF8String:

1 //c字符串转OC字符串
2     const char *s = "QYMa";
3     NSString *s3 = [[NSString alloc]initWithUTF8String:s];

(2). 将OC字符串转化为C字符串:UTF8String

1     //OC字符串转c字符串
2     const char *cs = [s3 UTF8String];

(3).将字符串转化为的int  double float. intValue,doubleValue,floatValue,intergerValue

1     NSString *s1 = @"123";
2     int i =  [s1 intValue];//转化int类型
3     double d = [s1 doubleValue];//转化为double类型
4     float f = [s1 floatValue];//转化为float类型
5     NSLog(@"\ni = %d, d = %f,f = %f",i,d,f );
    - (NSInteger)integerValue

运行结果:

i = 123, d = 123.000000,f = 123.000000

(4).求字符串的长度 :length

1 NSUInteger len = [s1 length];

(5).根据下标获取获取字符串中的某个字符 :characterAtIndex:

1 char st =   [s1 characterAtIndex:2];

(6).比较两个字符串是否相等,相等返回YES(1),不相等返回NO(0)   (BOOL   YES(1)  NO(0)) :isEqualToString:

1 BOOL b = [s1 isEqualToString:s4];

(7).比较两个字符串的大小,str1大于 返回1  相等返回0   小于返回-1:compare:

1 NSString *s1 = @"123";
2 NSString  *s5 = @"hahah";
3  int c1 =  [s1 compare:s5];

(8).比较两个字符串不区分大小写:相等为0 ,小于-1   大于为1 :caseInsensitiveCompare:

1     NSString *str1 = @"haha";
2     NSString *str2 = @"HaHA";
3     int equal =   [str1 caseInsensitiveCompare:str2];

(9).将字符串中的所有小写字符转换成大写 不改变原来的字符串,相当于将转化后为一个新的字符串。:uppercaseString

1     NSString *str1 = @"haha";
2     NSString *str3 = [str1 uppercaseString];
3     NSLog(@"%@",str3);

(10).将字符串中的所有大写字符转换成小写 不改变原来的字符串:lowercaseString

1     NSString *str4 = [str3 lowercaseString];
2     NSLog(@"%@",str4);

(11).将字符串中出现的第一个字母转换成大写,其余字母小写.:capitalizedString

1  NSString *str5 = [str1 capitalizedString];
2  NSLog(@"%@",str5);

(12).查找字串 在字符串中的位置,找不到返回NSNotFound(-1) 找到返回location和length: rangOfString:

1     NSString *str1 = @"my name is QYMa";
2     NSRange range = [str1 rangeOfString:@"QYMa"];
3     NSLog(@"%@",NSStringFromRange(range));//

    {11, 4}

(13).字符串抽取 从下标0开始到某个下标 (包前不包后):substringToIndex:

1 NSString *str3 = [str1 substringToIndex:11];

(14).字符串截取从 从某个下标开始抽取到字符串结束 :substringFromIndex:

1 NSString *str2 = [str1 substringFromIndex:11];

(15).在range指定范围内抽取字串:substringWithRange:

1 NSString *str1 = @"my name is QYMa";
2  NSString *str4 = [str1 substringWithRange:NSMakeRange(11, 4)];

(16).判断字符串是否以指定字符串开头:hasPrefix:

1     BOOL b = [str1 hasPrefix:@"my"];

(17).判断字符串是否以指定的字符串结尾:hasSuffix:

1 BOOL b1 = [str1 hasSuffix:@"Ma"];

(18).将指定文件的内容读取到字符串里面:initWithContentOfFile: encoding : error:

1     NSString *s44 = [[NSString alloc]initWithContentsOfFile:@"/Users/mqy/Desktop/zhongyao.txt" encoding:NSUTF8StringEncoding error:nil];

  stringWithContentsOfFile

 

(19).将制定URL中的内容读取到字符串中:initWithContentOfURL: encoding: error:

1     NSURL *url = [[NSURL alloc]initWithString:@"file:///Users/mqy/Desktop/zhongyao.txt"];
2     NSString * s5 = [[NSString alloc]initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

  stringWithContentsOfURL

 

(20).字符串的末尾追加新的字符,原来的字符串不变,会有一个新的字符串。:stringByAppendingString:

1 NSString *str5 = [str1 stringByAppendingString: @"^^"];

  my name is QYMa^^

(21).在指定的范围追加字符串,形成一个新的字符串。:stringByReplaceingCharactersInRange:  withString:

1     NSString * str33 = @"my  is QYMa";
2     
3     NSRange range1 = {3,0};
4     
5     // location代表的时从哪个索引开始插入,length 代表的意思可以覆盖几个字符
6     
7     NSString * str43 = [str33 stringByReplacingCharactersInRange:range1 withString:@"name"];
8     
9     NSLog(@"str4 %@",str43);//

     my name is QYMa

(22).使用新的字符,替换原有的字符。stringByReplacingOccurrencesOfString: withString:

1     NSString * str55 = @"my name Is QYMa";
2     
3     NSString * str6 = [str55 stringByReplacingOccurrencesOfString:@"I" withString:@"i"];
4     
5     NSLog(@"str6 %@",str6);

    str6 my name is QYMa

(23).删除某个特定字符。stringByReplacingOccurrencesOfString: withString:

    NSString * str7 = @"my---name--is";
    
    NSString * str8 = [str7 stringByReplacingOccurrencesOfString:@"-" withString:@""];
    NSLog(@"%@",str8);

    mynameis

(24).将字符串 写入到文件

1      NSString 
2      - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error 
1  //扩展路径 
2     NSString *Path = @"~/NSData.txt"; 
3     NSString *absolutePath = [Path stringByExpandingTildeInPath]; 
4     NSLog(@"absolutePath:%@",absolutePath); 
5     NSLog(@"Path:%@",[absolutePath stringByAbbreviatingWithTildeInPath]); 
6 
7     //文件扩展名 
8     NSString *Path = @"~/NSData.txt"; 
9     NSLog(@"Extension:%@",[Path pathExtension]); 

(25.)字符串检索 

 

 1     NSString 
 2      //如果找到就返回范围,否则NSRange的location项被设置为NSNotFound 
 3      - (NSRange)rangeOfString:(NSString *)subString; 
 4      - (NSRange)rangeOfString:(NSString *)subString option:(unsigned)mask; 
 5      - (NSRange)rangeOfString:(NSString *)subString option:(unsigned)mask      range:(NSRange)range;                                                                                        
 6      -----mask常用选项列表 
 7      NSCaseInsensitiveSearch          不区分字母大小写 
 8      NSLiteralSearch          对字符串进行字节单位的比较,一般可提高检索速度 
 9      NSBackwardsSearch     从范围的末尾开始检索 
10      NSAnchoredSearch     仅检索制定范围的前部。忽略字符串中间的检索字符 
11      例如: 
12      NSString *string = @"hello world"; 
13      NSRange range = [string rangeOfString:@"he"]; 
14      if(range.location != NSNotFound) 
15      { 
16           NSLog(@" location=%d,length=%d",range.location,range.length); 
17      }

(26).将字符串通过特定字符分割。 将字符串切割成数组:componentsSeparatedByString:

1     NSString * str = @"test,test1,test2,test3";
2     NSArray *array = [str componentsSeparatedByString:@","];
3     NSLog(@"array[2] = %@",array[2]);

(27).多重分割符:有2个或两个以上分隔符.componentsSeparatedByCharactersInSet

1     NSString *str = @"A~B^C";
2     
3     NSArray *arr = [str componentsSeparatedByCharactersInSet:
4                     [NSCharacterSet characterSetWithCharactersInString:@"~^"]];

 (28).将数组中的字符串拼接成一个路径.pathWithComponents:

1     NSMutableArray *muArray = [NSMutableArray array];
2     [muArray addObject:@"Users"];
3     [muArray addObject:@"mqy"];
4     [muArray addObject:@"DeskTop"];
5     NSString *path = [NSString pathWithComponents:muArray];
6     NSLog(@"%@",path);

    Users/mqy/DeskTop

(29)将路径分割成数组 pathComponents

1     //将路径分割成数组
2     NSArray  *array = [path pathComponents];
3     NSLog(@"%@",array);

(30).判断是否为绝对路径 isAbsolutePath(依据前面有没有/)

1     NSString *str1 = @"/Users/mqy/Desktop";
2     //判断是否为绝对路径
3     NSLog(@"%i",[str1 isAbsolutePath]);

 

 

NSStringEncoding 中常用的字符编码:

     NSASCIIStringEncoding 
     NSUTF8StringEncoding 
     NSUnicodeStringEncoding 

说实话,NSString的方法真心好多啊!(°_°)。

接下来说一下,NSMutableString

NSMutableString 类继承NSString类,那么NSString 提供的方法在NSMutableString中都可以使用,NSMutableString好比一个字符串链表,它可以任意的动态在字符串中添加字符串 删除字符串 指定位置插入字符串,用它来操作字符串更加灵活。

下面就说一下:

(1).将不可变的字符串转换为可变的字符串

1 NSMutableString *s1 = [NSMutableString stringWithFormat:@"my name is QYMa"];
2 NSMutableString * str =  [[NSMutableString alloc]initWithString:@"hello"];

(2).在指定下标(不要越界)位置插入NSString类型字符串。insertString: atIndex:

1 [s1 insertString:@" ?" atIndex:11];
  my name is  ?QYMa

(3).在末尾追加单个字符串。appendString:                 appendFormat:

1   //使用拼接方法 拼接单个
2     [s1 appendString:@" girl"];
1    //拼接多个
2     [s1 appendFormat:@"my age is %d",26];

(4).删除指定子字符串。deleteCharactersInRange: rangeOfString:

1     //获取girl所在的位置,并删除
2     [s1 deleteCharactersInRange:[s1 rangeOfString :@"girl"]];
3     NSLog(@"S1 = %@",s1);

(5).从指定下标删除length个字符. deleteCharactersInRange:

1 [str deleteCharactersInRange:NSMakeRange(0, 2)];

(6).将指定下标位置的length个字符替换为指定的字符串.replaceCharactersInRange:  withString:

[str replaceCharactersInRange:NSMakeRange(3, 1) withString:@"ios"];

(7).修改字符串亦称对该可变字符串赋值。

 

1 [str setString:@"QYMa"];

 

目前就先整理到这了,这个可真是不少啊!好啦!活动活动筋骨,出去呼吸一下新鲜空气,走啦!

 

posted @ 2015-04-10 11:07  Qingyun_Qearl  阅读(739)  评论(0)    收藏  举报