天天看点

iOS概念入门学习-Foundation框架-NSString

概要:本文主要介绍了NSString的常用用法,在C语言中,我们使用的是char *来存储字符串,而OC为我们提供了更加强大的NSString类型,让我们可以更灵活便捷的进行各类字符串操作

一、NSString介绍

1.概念

一个NSString对象就代表一个字符串(文字内容) 
一般称NSString为字符串类 
           

2.NSString的创建方式

(1)直接创建

NSString *str = @"abc";
NSString *st3 = @"abc";
           

这种写法,字符串存储在内存的常量区

(2)格式化创建

iOS概念入门学习-Foundation框架-NSString

注意这两种写法所占用的内存在不同的区域,下个知识点我们将详细介绍。

(3)NSString的内存管理问题

首先让我们来看几种初始化方法所占用不同内存空间的实例,如图:

iOS概念入门学习-Foundation框架-NSString

可见,str1,str3,str5所占用的内存空间是一样的,它们在常量区,str2,str4所占用内存空间是不同的,它们在堆区。

速记方法:直接用@”“和…WithString创建的在常量区,用…WithFormat创建的在堆区。

二、NSString常见用法

1.长度计算

iOS概念入门学习-Foundation框架-NSString

由实例可见,无论中文英文,在OC中都占一个字节,而C语言中中文占3个字节

2.比较字符串大小

使用compare比较字符串大小,实例如下:

iOS概念入门学习-Foundation框架-NSString

compare的返回结果有三种情况:

NSOrderedAscending:升序 结果是一个极大数

NSOrderedSame:相同 结果是0

NSOrderedDescending:降序 结果是1

如果要忽略大小写的话,可以在options 里面加一个参数

NSCaseInsensitiveSearch;

具体如下:

NSComparisonResult result2 =[str1 compare:str2 options:NSCaseInsensitiveSearch];

常见的参数有3个

NSCaseInsensitiveSearch:不区分大小写字符。

NSLiteralSearch:进行完全比较,区分大小写。(默认)

NSNumericSearch:比较字符串的字符个数,而不是字符值。

3.判断字符串是否相等

在C语言中,我们可以利用“==”进行判断,但是在OC中由于相同的字符串存储的内存空间可能不同,所以即使是相同的字符串如果用“==”进行比较的话也可能会出现错误的结果。如:

iOS概念入门学习-Foundation框架-NSString

因此,在OC中我们要采取另一种方式比较字符串是否相等。

-(BOOL) isEqualToString: (NSString *) aString;

该方法比较接收方和当作参数传递来的字符串 返回BOOL(YES或NO)型数据,表示两个字符串的内容是否相同,注意区分大小写

4.NSString前后缀检查

(1)判断字符串前缀

-(BOOL) hasPrefix: (NSString *) aString; 
           

此方法常用来检测网址前缀

(2)判断字符串后缀

-(BOOL) hasSuffix: (NSString *) aString; 
           

此方法常用来检测文件名后缀

以上两方法返回值是一个bool值,匹配成功则返回1,失败则返回0

5.字符串查找

-(NSRange)rangeOfString:(NSString *)aString;
           

此方法用来检查字符串内容中是否包含了aString如果包含, 就返回aString在字符串中第一次出现的范围 ,返回结果是NSRange类型的。如果不包含, NSRange的location为NSNotFound, length为0

iOS概念入门学习-Foundation框架-NSString

6.字符串的截取和替换

(1)字符串的截取

- (NSString *)substringFromIndex:(NSUInteger)from; 
从指定位置from开始(包括指定位置的字符)到尾部 

- (NSString *)substringToIndex:(NSUInteger)to; 
从字符串的开头一直截取到指定的位置to,但不包括该位置的字符 

- (NSString *)substringWithRange:(NSRange)range; 
按照所给出的NSRange从字符串中截取子串 
           
iOS概念入门学习-Foundation框架-NSString

实例:将标签内的字符截取出来并打印

iOS概念入门学习-Foundation框架-NSString

(2)字符串的替换

iOS概念入门学习-Foundation框架-NSString

7.其他

NSString的函数还有很多,还有一些只做简单介绍

(1)获取制定位置的字符

-(unichar)characterAtIndex:(NSUInteger)index;
           

(2)字符串和其他数据类型的转换

-(double)doubleValue;
-(float)floatValue;
-(int)intValue;
           

OC->C :

- (char *)UTF8String;

C->OC :

NSString *strr = [NSString stringWithUTF8String:"abc"];

(3)文件写入与读取

1)写入
str writeToFile:@"文件的路径" atomically:原子性(YES/NO)encoding:NSUTF8StringEncoding error:nil
           
2)读取
NSString *str = [NSString stringWithContentsOfFile:@"待读取的文件的路径" encoding:NSUTF8StringEncoding(编码) error:&err(有没有错误)]
           

三、NSMutableString

1.基本概念

NSMutableString 类继承NSString类,那么NSString 提供的方法在NSMutableString中基本都可以使用。

NSMutableString好比一个字符串链表,它可以任意的动态在字符串中添加字符串删除字符串指定位置插入字符串,使用它来操作字符串会更加灵活。

2.NSMutableString和NSString的区别:

(1)NSString是不可变的, 里面的文字内容是不能进行修改的

(2)NSMutableString是可变的, 里面的文字内容可以随时更改

(3)NSMutableString能使用NSString的所有方法(继承关系)

3.理解字符串的可变和不可变

不可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生变化 
可变:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改 
           

假设我定义了一个字符串,然后又给这个字符串重新”赋值”,起始这个赋值的过程是指针重新指向的过程,而非把原来字符串的值覆盖掉。

iOS概念入门学习-Foundation框架-NSString

4.NSMutableString的常用方法

由于NSMutableString继承自NSString,所以NSString所具有的功能NSMutableString都是具备的,除此之外NSMutableString还有一些特有的功能:增删改查!

(1)增

//拼接aString到最后面

-(void)appendString:(NSString *)aString;

//拼接一段格式化字符串到最后面

-(void)appendFormat:(NSString *)format, …;

//在loc这个位置中插入aString

-(void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;

(2)删

//删除一个范围内的字符串

-(void)deleteCharactersInRange:(NSRange)range;

(3)改

-(void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;

使用aString替换range范围内的字符串,一般不是以string开头的一般都不会产生一个新的字符串。replaceOccurrencesOfString方法不需要传范围参数。

(4)查

查询函数在NSString部分中已经介绍过,不再赘述。

5.字符串使用注意事项

特别注意:在使用NSMutableString时,如果用@”abc”方式创建的字符串始终是NSString,而不是NSMutableString,更无法对字符串进行可变字符串的特殊操作

总结:作为OC中最常用的类型之一,NSString的用法必须要牢牢掌握,与C语言中的 char * 相比,NSString提供更多地方法,功能更加强大,还有NSMutableString作为NSString的扩充,给我们提供了更多地便利和可能性!