NSString简介
2016-02-16 16:49
603 查看
字符串(NSString、NSMutableString)是OC语言中很常用的一个类。NString和NSMutableString最主要的区别就是NSString一旦创建赋值后就不能对其内容进行修改(如长度、插入字符、删除字符),除非重新赋值;而NSMutableString在其创建赋值后可以对其进行删除、插入、修改长度等操作。本篇文章只介绍NSString的一些简单的用法(初学者)
1.字符串的初始化
1>通常创建一个字符串
2>C字符串转换成OC字符串
3>最简单的一种方式如下:
2.字符串的长度
1>获取字符串的长度
2>判断一个字符串中是否包含某个子字符串 并显示其范围
这里要用到一个结构体类NSRange 内容如下:
打印结果:
3>获取指定范围的字符串
打印结果:
3、获取字符串的某个特定的字符
需要注意的是英文字符和汉字的区别,英文字符只占一个字节,而汉字占3个字节。但是算字符串的长度时汉字也是一个长度,代码如下:
打印结果如下:
4、字符串的大小写转化 和转换成C中的接本数据类型
下面的属性都可以用点语法点出来 或调用实例方法
5、字符串大小的比较
字符串的创建会有一些优化,当你创建NSString* s1=@”abc”时,会有一个字符串池存储@”abc”。你再次创建一个NSString* s2=@”abc”时,不会马上重新开辟内存,而是从字符串池中查找若存在,则将s1的直接赋给s2。这样s1和s2指向同一个地址。这样你用==去判断两个字符串是否相等也行,因为 ==本质上是判断两个字符串的地址是否相等。
但是在实际开发中,不能用”==”去判断两个字符串是否相等。必须使用NString提供的方法isEqualToString去判断。它包含两层意思:
1>若两个字符串的地址相等,则直接返回YES;
2>若地址不相等,再去判断两个字符串的每个字符是否一样,一样返回YES
打印结果:
还有一个升级版的判断方式”compare:”,能够比较字符串的大小。是一个一个字符之间的比较(也可以看成是转换成ASCII值进行比较),返回一个枚举类型。
6、字符串的分割
componentsSeparatedByString:这个实例方法可以将一个字符串用这个字符串中的某个字符进行分割 得到一个数组:
打印结果:
7、判断字符串的前缀和后缀
有时可能会遇到判断一个字符串是否以@”XXX”开头,或者将同种类型的文件放在一个文件夹中(判断是否有相同的后缀)
1.字符串的初始化
1>通常创建一个字符串
NSString* s1= [[NSString alloc]initWithFormat:@"所需要的字符串"]; //实例方法 NSString* s1 = [NSString stringWithFormat:@"所需要的字符串"]; //类方法
2>C字符串转换成OC字符串
NSString* s1 = [[NSString alloc]initWithUTF8String:"cString"];//实例方法 NSString* s1 = [NSString stringWithUTF8String:"cString"]; //类方法
3>最简单的一种方式如下:
NSString* s1=@"所需要的字符串";
2.字符串的长度
1>获取字符串的长度
NSString* s1=@"123abc"; NSUInteger len = [s1 length]; //或者s1.length
2>判断一个字符串中是否包含某个子字符串 并显示其范围
这里要用到一个结构体类NSRange 内容如下:
typedef struct _NSRange { NSUInteger location; //子字符串第一个字符的位置 NSUInteger length; //子字符串的长度 } NSRange; NSString * s2=@"abc123cdef"; NSRange range = [s2 rangeOfString:@"123"]; //查找字符串@"123"在s2中的范围 NSLog(@"range locatin:%lu", range.location); //'1'的位置 NSLog(@"range length:%lu", range.length); //@"123"的长度 //是否存在 if(range.location == NSNotFound) { NSLog(@"没有找到字符串123"); }
打印结果:
3>获取指定范围的字符串
//获取指定范围的子串 NSString *s3=@"abc1234567def"; NSString * sub1 = [s3 substringWithRange:NSMakeRange(3, 7)]; NSLog(@"sub1:%@", sub1); //返回指定下标之前的字符串(**注意**不包括该字符) NSString *sub2=[s3 substringToIndex:3]; NSLog(@"sub2:%@", sub2); //返回指定下标之后的字符串(**注意**包括该字符) NSString *sub3=[s3 substringFromIndex:3]; NSLog(@"sub3:%@", sub3);
打印结果:
3、获取字符串的某个特定的字符
需要注意的是英文字符和汉字的区别,英文字符只占一个字节,而汉字占3个字节。但是算字符串的长度时汉字也是一个长度,代码如下:
NSString * s1=@"a肖"; NSLog(@"s1的长度:%lu", [s1 length]); //字符串长度 NSLog(@"s1的第一个字符:%c", [s1 characterAtIndex:0]); NSLog(@"s1的第二个字符:%d", [s1 characterAtIndex:1]); //不能用%@打印 取出的第二个字符不是类对象 unichar ch =[s1 characterAtIndex:1]; NSString *s2=[NSString stringWithCharacters:&ch length:1]; NSLog(@"取汉字字符:%@", s2);
打印结果如下:
4、字符串的大小写转化 和转换成C中的接本数据类型
NSString *str=@"china"; NSString *upStr=[str uppercaseString]; //全部转化成大写CHINA NSString *lowStr=[upStr lowercaseString]; //全部转化成小写china NSString* capitalStr=lowStr.capitalizedString; //首字母大写China
下面的属性都可以用点语法点出来 或调用实例方法
NSString * s1=@"123"; int a=s1.intValue; //或者int a=[s1 intValue]; @property (readonly) double doubleValue; //转换成double类型 @property (readonly) float floatValue; //转换成float类型 @property (readonly) int intValue; //转换成整形 @property (readonly) NSInteger integerValue; //长整形 NS 4000 Integer=long @property (readonly) long long longLongValue; //长长整形 @property (readonly) BOOL boolValue ; //布尔类型
5、字符串大小的比较
字符串的创建会有一些优化,当你创建NSString* s1=@”abc”时,会有一个字符串池存储@”abc”。你再次创建一个NSString* s2=@”abc”时,不会马上重新开辟内存,而是从字符串池中查找若存在,则将s1的直接赋给s2。这样s1和s2指向同一个地址。这样你用==去判断两个字符串是否相等也行,因为 ==本质上是判断两个字符串的地址是否相等。
NSString* s1=@"abc"; NSString* s2=@"abc"; NSLog(@"s1的地址%p",s1); NSLog(@"s2的地址%p",s2); if (s1 == s2) NSLog(@"==判断 s1和s2相等"); //使用初始化创建的字符串,将会重新开辟内存,所以用==判断就得不到想要的结果 NSString* s3=[NSString stringWithFormat:@"%@",@"abc"]; NSLog(@"s3的地址%p", s3); if (s1 == s3) NSLog(@"==判断 s1和s3相等"); //将不会打印
但是在实际开发中,不能用”==”去判断两个字符串是否相等。必须使用NString提供的方法isEqualToString去判断。它包含两层意思:
1>若两个字符串的地址相等,则直接返回YES;
2>若地址不相等,再去判断两个字符串的每个字符是否一样,一样返回YES
if([s3 isEqualToString:s1]) { NSLog(@"isEqualToString判断:s1和s3相等"); }
打印结果:
还有一个升级版的判断方式”compare:”,能够比较字符串的大小。是一个一个字符之间的比较(也可以看成是转换成ASCII值进行比较),返回一个枚举类型。
NSString *s1=@"acb"; NSString *s2=@"abcd"; //比较大小或相等 返回枚举值:NSCoparisonResult NSComparisonResult ret=[s1 compare:s2]; if(ret == NSOrderedAscending) NSLog(@"s1<s2"); //NSOrderedAscending升序 else if (ret==NSOrderedDescending) NSLog(@"s1>s2"); //NSOrderedDescending降序 else NSLog(@"s1=s2"); //NSOrderedSame 相等
6、字符串的分割
componentsSeparatedByString:这个实例方法可以将一个字符串用这个字符串中的某个字符进行分割 得到一个数组:
NSString* s1=@"i love you"; NSArray* arr=[s1 componentsSeparatedByString:@" "];//用字符空格进行分割 for (int i=0; i<arr.count; i++) { NSLog(@"arr[%d]:%@",i, arr[i]); }
打印结果:
7、判断字符串的前缀和后缀
有时可能会遇到判断一个字符串是否以@”XXX”开头,或者将同种类型的文件放在一个文件夹中(判断是否有相同的后缀)
NSString* s1=@"www.baidu.com"; if([s1 hasPrefix:@"www"]) //前缀 NSLog(@"s1以www开头"); if([s1 hasSuffix:@".com"]) //后缀 NSLog(@"s1以.com结尾");
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 讲解iOS开发中基本的定位功能实现
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- 浅析iOS应用开发中线程间的通信与线程安全问题
- 检测iOS设备是否越狱的方法
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- iOS推送的那些事
- IOS 改变键盘颜色代码
- 举例详解iOS开发过程中的沙盒机制与文件
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- 分享一个iOS下实现基本绘画板功能的简单方法