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

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

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

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

  

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

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

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

  2.字符串的转化

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

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

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

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

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

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

运行结果:

i = 123, d = 123.000000,f = 123.000000

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

 NSUInteger len = [s1 length];

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

 char st =   [s1 characterAtIndex:];

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

 BOOL b = [s1 isEqualToString:s4];

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

 NSString *s1 = @"";
NSString *s5 = @"hahah";
int c1 = [s1 compare:s5];

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

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

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

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

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

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

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

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

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

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

    {11, 4}

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

 NSString *str3 = [str1 substringToIndex:];

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

 NSString *str2 = [str1 substringFromIndex:];

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

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

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

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

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

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

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

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

  stringWithContentsOfFile

 

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

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

  stringWithContentsOfURL

 

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

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

  my name is QYMa^^

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

     NSString * str33 = @"my  is QYMa";

     NSRange range1 = {,};

     // location代表的时从哪个索引开始插入,length 代表的意思可以覆盖几个字符

     NSString * str43 = [str33 stringByReplacingCharactersInRange:range1 withString:@"name"];

     NSLog(@"str4 %@",str43);//

     my name is QYMa

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

     NSString * str55 = @"my name Is QYMa";

     NSString * str6 = [str55 stringByReplacingOccurrencesOfString:@"I" withString:@"i"];

     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).将字符串 写入到文件

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

(25.)字符串检索 

 

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

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

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

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

     NSString *str = @"A~B^C";

     NSArray *arr = [str componentsSeparatedByCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"~^"]];

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

     NSMutableArray *muArray = [NSMutableArray array];
[muArray addObject:@"Users"];
[muArray addObject:@"mqy"];
[muArray addObject:@"DeskTop"];
NSString *path = [NSString pathWithComponents:muArray];
NSLog(@"%@",path);

    Users/mqy/DeskTop

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

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

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

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

NSStringEncoding 中常用的字符编码:

NSASCIIStringEncoding 
     NSUTF8StringEncoding 
     NSUnicodeStringEncoding

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

接下来说一下,NSMutableString

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

下面就说一下:

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

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

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

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

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

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

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

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

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

 [str deleteCharactersInRange:NSMakeRange(, )];

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

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

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

 [str setString:@"QYMa"];

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

14.Object-C--浅谈Foundation框架字符串NSString 与NSMutableString的更多相关文章

  1. 15.Object-C--浅谈Foundation框架OC数组NSArray与NSMutableArray

    昨天总结了一下NSString与NSMutableString,今天我在这里总结一下NSArray与NSMutableArray. NSArray数组是:不可变数组. nil 是数组元素结束的标记.O ...

  2. 13.Object-C--浅谈Foundation框架常用的结构体

    ------- android培训.iOS培训.期待与您交流! ---------- 昨天学习了Foundation框架中常用的结构体,下面我简单的总结一下,如果错误麻烦请留言指正,谢谢! Found ...

  3. OC中Foundation框架之NSString、NSMutableString

    创建方式 )直接赋值 NSString *str =@"abc"; )创建对象 NSString *str2 = [[NSString alloc]init]; str2 =@&q ...

  4. 手撸ORM浅谈ORM框架之基础篇

    好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...

  5. 手撸ORM浅谈ORM框架之Add篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  6. 手撸ORM浅谈ORM框架之Update篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  7. 手撸ORM浅谈ORM框架之Delete篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  8. 手撸ORM浅谈ORM框架之Query篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  9. Foundation框架—字符串

    Foundation框架—字符串 一.Foundation框架中一些常用的类 字符串型: NSString:不可变字符串 NSMutableString:可变字符串 集合型: 1) NSArray:O ...

随机推荐

  1. 函数式 CSS (FCSS)

    在Wealthfront我们是一个函数式编程的超级粉丝.强调不变性和函数式风格意味着更少的“意外”(surprises),因为副作用是有限的或不存在的.我们能将独立的组件迅速构建出大型系统,通过组合的 ...

  2. MySQL查看表占用空间大小(转)

    MySQL查看表占用空间大小(转) //先进去MySQL自带管理库:information_schema //自己的数据库:dbwww58com_kuchecarlib //自己的表:t_carmod ...

  3. Ruby Profiler 详解之 stackprof

    简介 stackprof 是基于采样的一个调优工具,采样有什么好处呢?好处就是你可以线上使用,按照内置的算法抓取一部分数据,只影响一小部分性能.它会产生一系列的 dump 文件,然后你在线下分析这些文 ...

  4. ZOJ3560 Re:the Princess(高斯消元法)

    题目要读很久才能理解它的意思和笑点(如果你也看过那个笑话的话),读懂之后就会发现是一个高斯消元法的题目,对于我来说难点不在高斯消元,而在于字符串处理.先来说说题意吧: 总共有n个人,n个人都会有一段话 ...

  5. POJ 1006 Biorhythms (中国剩余定理)

    在POJ上有译文(原文右上角),选择语言:简体中文 求解同余方程组:x=ai(mod mi) i=1~r, m1,m2,...,mr互质利用中国剩余定理令M=m1*m2*...*mr,Mi=M/mi因 ...

  6. POJ 1279 Art Gallery(半平面交求多边形核的面积)

    题目链接 题意 : 求一个多边形的核的面积. 思路 : 半平面交求多边形的核,然后在求面积即可. #include <stdio.h> #include <string.h> ...

  7. ExtJs布局之tabPanel

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  8. C++不能显式调用构造函数,会生成匿名对象,这点与Java完全不一样!

    Java可以直接调用同名构造函数,仅仅起初始化的功能,并不构造新的对象,但是C++里面没有.看一下这段代码: class A { public: A() { printf("A() \n&q ...

  9. 296. Best Meeting Point

    题目: A group of two or more people wants to meet and minimize the total travel distance. You are give ...

  10. Android 【问题汇总】列表数组越界的问题

    遇到了一个诡异的问题,ListView发生数组越界(偶尔会),程序崩溃. 错误信息如下: W/dalvikvm( ): threadid=: thread exiting with uncaught ...