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. tar命令--解压缩

    tar命令是linux中的一个解压缩的命令.使用tar命令之前首先要搞清楚两个概念:打包和压缩.打包是指将一大堆文件或目录变成一个总的文件:压缩则是将一个大的文件通过一些压缩算法变成一个小文件. 为什 ...

  2. 如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?(2)

    [编者按]本篇文章作者是 Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客.本篇文章中,作者主要介绍了如何基于 Parse 特点,打造一款类似 Instagr ...

  3. 【leetcode】Multiply Strings(middle)

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  4. js小技巧(一)

    事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.srcE ...

  5. C Primer Plus之指针

    c之精髓——指针(pointer)——用来存储地址的变量.一般来讲,指针是一个其数值为地址的变量(或更一般地说是一个数据对象). 一元运算符&可以取得变量的存储地址,一个变量的地址可以被看作是 ...

  6. lintcode:线段树的构造

    线段树的构造 线段树是一棵二叉树,他的每个节点包含了两个额外的属性start和end用于表示该节点所代表的区间.start和end都是整数,并按照如下的方式赋值: 根节点的 start 和 end 由 ...

  7. I,P,B帧和PTS,DTS的关系

    http://www.cnblogs.com/qingquan/archive/2011/07/27/2118967.html 基本概念: I frame :帧内编码帧 又称intra picture ...

  8. SPRING IN ACTION 第4版笔记-第十一章Persisting data with object-relational mapping-002设置JPA的EntityManagerFactory(<persistence-unit>、<jee:jndi-lookup>)

    一.EntityManagerFactory的种类 1.The JPA specification defines two kinds of entity managers:  Applicatio ...

  9. Spring boot 整合jsp和tiles模板

    首先贴上我的pox.xml文件,有详细的支持注释说明 <?xml version="1.0" encoding="UTF-8"?> <proj ...

  10. Hadoop管理员的十个最佳实践

    前言 接触Hadoop有两年的时间了,期间遇到很多的问题,既有经典的NameNode和JobTracker内存溢出故障,也有HDFS存储小文件问题,既有任务调度问题,也有MapReduce性能问题.遇 ...