------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、NSString类介绍及基本应用
1、什么是NSString?
一个NSString对象就代表一个字符串(文字内容)
2、NSString的创建方式
NSString的创建方式比较多
1)最直接的方式(这是常量字符串,存储在常量区)
NSString *str = @"abc";
NSString *st3 = @"abc";
2)格式化的方式(字符串存储在内存的堆区)
NSString *st2 = [NSString stringWithFormat:@"%@", @"jack"];
NSString *str = [[NSString alloc] initWithFormat:@"My age is %d", 10];
二、NSString字符串比较
1、字符串比较函数
1)比较字符串大小
字符串根据排列顺序的不同,会有大小的差异,如果我们要比较两个字符串的大小的话,可以使用compare方法。
compare 方法返回的结果有三种:NSOrderedAscending,NSOrderedSame,NSOrderedDescending,
str > str2 NSOrderedDescending 1 b a
str < str2 NSOrderedAscending -1 a<b
str == str2 NSOrderedSame 0
另外,在使用compare方法时可以添加参数来决定是否区分大小写,或者声明为比较字符串个数而不是字符值等比较条件
NSString*str = @"adc";
NSString*str2 = @"ADc";
NSComparisonResultresult = [str compare:str2];
switch(result) {
caseNSOrderedDescending:NSLog(@"str > str2");break;
caseNSOrderedAscending:NSLog(@"str < str2");break;
caseNSOrderedSame:NSLog(@"str == str2");break;
}
NSLog(@”%ld”,result);
2)比较字符串大小,指定条件
如果要忽略大小写的话,可以在options 里面加一个参数NSCaseInsensitiveSearch;具体如下:
NSComparisonResult result2 =[str1 compare:str2 options:NSCaseInsensitiveSearch];
常见的有3个:
NSCaseInsensitiveSearch:不区分大小写字符。
NSLiteralSearch:进行完全比较,区分大小写。(默认)
NSNumericSearch:比较字符串的字符个数,而不是字符值。
3)判断字符串是否相等
正确的方法:
-(BOOL) isEqualToString: (NSString *) aString;
比较接收方和当作参数传递来的字符串,返回BOOL(YES或NO)型数据,表示两个字符串的内容是否相同,注意区分大小写。
三、NSString前后缀检查及搜索
1、NSString前后缀检查
1)判断字符串前缀:检查字符串是否以另一个字符串开头
语法:
-(BOOL) hasPrefix: (NSString *) aString;
2)判断字符串后缀:判断字符串是否以另一个字符串结尾
语法:
-(BOOL) hasSuffix: (NSString *) aString;
2、字符串查找
-(NSRange)rangeOfString:(NSString *)aString;
用来检查字符串内容中是否包含了aString,如果包含, 就返回aString在字符串中第一次出现的范围
反方向搜索:
// 从后向前搜索,遇到第一次出现的位置,则结束
[str rangeOfString: @"str" options: NSBackwardsSearch];
typedefstruct_NSRange {
NSUIntegerlocation; //位置
NSUIntegerlength; //长度
} NSRange;
四、NSRange使用
1、NSRange的使用
NSRange是Foundation框架中比较常用的结构体, 它的定义如下:
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
NSUInteger的定义:
typedef unsigned int NSInteger;
typedef unsigned long NSUInteger;
NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围
NSRange有2个成员:
NSUInteger location : 表示该范围的起始位置;
NSUInteger length : 表示该范围内的长度。
比如@“I love iOS”中的@“iOS”可以用location为7,length为3的范围来表示。
2、NSRange创建的几种方式
有4种方式创建一个NSRange变量
方式1
NSRange range;
range.location = 7;
range.length = 3;
方式2
NSRange range = {7, 3};
或者
NSRange range = {.location = 7, .length = 3};
方式3 : 使用NSMakeRange函数
NSRange range = NSMakeRange(7, 3);
方式4 : 最直接的方式
NSRange range = {5,8};
查看Range的值,可以使用
NSLog(@"%@",NSStringFromRange(range));
五、字符串的截取和替换
1、字符串的截取
-(NSString *)substringFromIndex:(NSUInteger)from;
从指定位置from开始(包括指定位置的字符)到尾部;
-(NSString *)substringToIndex:(NSUInteger)to;
从字符串的开头一直截取到指定的位置to,但不包括该位置的字符;
-(NSString *)substringWithRange:(NSRange)range;
按照所给出的NSRange从字符串中截取子串。
2、字符串的替换
-(NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;
用replacement替换target
六、NSString的其他用法
1、获取字符串的每个字符
-(NSUInteger)length;
返回字符串的长度(有多少个字符,无论中文字符、英文字符等等,一个字符就是一个字符);
-(unichar)characterAtIndex:(NSUInteger)index;
返回index位置对应的字符。
2、字符串和其他数据类型的转换
字符串转为基本数据类型
-(double)doubleValue;
-(float)floatValue;
-(int)intValue;
OC字符串转为C语言字符串
NSString *str = @”abc”;
const char *s = [str UTF8String];
C语言字符串转为OC字符串
char s[] = “abc”;
NSString *str = [NSString stringWtihUTF8String:s];
七、NSMutableString介绍和使用
1、NSMutableString 基本概念
NSMutableString类继承NSString类,那么NSString提供的方法在NSMutableString中基本都可以使用,NSMutableString好比一个字符串链表,它可以任意的动态在字符串中添加字符串删除字符串指定位置插入字符串,使用它来操作字符串会更加灵活。
NSMutableString和NSString的区别
NSString是不可变的, 里面的文字内容是不能进行修改的
NSMutableString是可变的, 里面的文字内容可以随时更改
NSMutableString能使用NSString的所有方法
2、字符串的可变和不可变
不可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生变化
可变:指的是字符串在内存中占用的存储空间可以不固定,并且存储的内容可以被修改
八、NSMutableString常用方法
1、NSMutableString 常用方法
通过调用string方法创建一个空的NSMutableString:
-(void)appendString:(NSString *)aString;
拼接aString到最后面:
-(void)appendFormat:(NSString *)format, ...;
拼接一段格式化字符串到最后面:
-(void)deleteCharactersInRange:(NSRange)range;
删除range范围内的字符串(一般可以配合rangeOfString删除):
-(void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
在loc这个位置中插入aString:
-(void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
使用aString替换range范围内的字符串,一般不是以string开头的一般都不会产生一个新的字符串。replaceOccurrencesOfString方法不需要传范围参数。
2、字符串使用注意事项
1)NSMutableString易犯错误
注意:
@”hello”这种方式创建的字符串始终是NSString,不是NSMutalbeString.所以下面的代码创建的还是NSString,此时使用可变字符串的函数,无法操作字符串。
NSMutalbeString *s1 = @”hello”;
2)NSMutableString的string属性:会将源对象的所有字符串都覆盖掉。
.string 属性可以修改字符串的内容
3)开发中到底使用NSString还是NSMutableString?
开发中绝大多数用到的都是NSString
只是如果需要做特殊处理的时候(截取、拼接、替换)等操作,才考虑使用NSMutableString
4)位枚举,枚举值是2的0次方、1次方、2次方......
NSString *s1 = @"hello";
NSRange range = [s1 rangeOfString:@"o" options:0range:NSMakeRange(0, 5)];
if (range.location == NSNotFound) {
NSLog(@"没有找到。");
}else {
NSLog(@"location = %ld, length = %ld", range.location, range.length);
}