相关文章推荐
阳光的手套  ·  表示例 - Office Scripts ...·  11 月前    · 
阳刚的骆驼  ·  C++ 数组 | 菜鸟教程·  1 年前    · 
刚毅的长颈鹿  ·  java.net.UnknownHostEx ...·  1 年前    · 

无论是什么编程语言对字符串的操作是少不了的,对复杂的字符串的分析和操作我们可以用正则表达式来达到我们的目的。简单的字符串处理我们可以借助OC中NSString封装好的字符串处理方法,不过前提是你得了解每个方法如何使用,以下做了一个简单的总结,便于以后使用。以下事例是原创代码,转载请注明出处。

1.字符串的创建

字符串的创建有多种方法,下面的例子中给了常用的几种字符串创建方法(还有好多)

//字符串创建工厂
NSString *str1 = [NSString stringWithFormat:@ "%d, %d" ,1,2];
NSString *str2 = [NSString stringWithString:@ "hello" ];
NSString *str3 = [NSString stringWithCString: "aaa" encoding:NSUTF8StringEncoding];
//普通方法
NSString *str4 = @ "hello" ;

retain:始终是浅复制。引用计数每次加一。返回对象是否可变与被复制的对象保持一致。

copy:对于可变对象为深复制,引用计数不改变;对于不可变对象是浅复制, 引用计数每次加一。始终返回一个不可变对象。

mutableCopy:始终是深复制,引用计数不改变。始终返回一个可变对象。

​    ​ 代码如下:

NSString *string1 = @ "hello" ;
NSString *string2 = [string1 mutableCopy];
NSString *string3 = [string1 copy];
//NSLog(string2);
//NSLog(string3);
//比较指针
if (string1 == string2)
NSLog(@ "指针相同" );
NSLog(@ "string1通过深拷贝给string2所以指针不同" );
//比较指针
if (string1 == string3)
NSLog(@ "string1通过浅拷贝给string3所以指针相同" );
NSLog(@ "string1通过深拷贝给string3所以指针不同" );
//比较内容
if ([string1 isEqualToString:string2] == YES)
NSLog(@ "string1 和 String2的内容相同" );
NSLog(@ "string1 和 String2的内容不同" );
2014-07-30 20:12:07.796 HelloOC[2073:303] string1通过深拷贝给string2所以指针不同
2014-07-30 20:12:07.796 HelloOC[2073:303] string1通过浅拷贝给string3所以指针相同
2014-07-30 20:12:07.797 HelloOC[2073:303] string1 和 String2的内容相同
//compare的返回类型是NSComparisonResult
NSComparisonResult result = [strCompare1 compare:strCompare2];
switch (result) {
case NSOrderedAscending:
NSLog(@ "升序(str1 < str2)" );
break ;
case NSOrderedSame:
NSLog(@ "两个字符串相等" );
break ;
case NSOrderedDescending:
NSLog(@ "降序(str1 > str2)" );
break ;
default :
NSLog(@ "别的情况!" );
break ;

​5.字符串的拼接函数 stringByAppendingString : (NSString *) aString;  和 stringByAppendingFormat : (NSString *) format ...;

​    ​    ​下面是对上面两个函数的测试:

//用stringByAppendingString来进行字符串的拼接
append1 = [append1 stringByAppendingString:append2];
NSLog(append1);
//用stringByAppendingFormat来进行字符串的拼接
append1 = [append1 stringByAppendingFormat:@ " iPhone%dS" ,6];
NSLog(append1);

​6.字符串的查找

​    ​-(BOOL) hasPrefix : (NSString *) string: 判断一个字符串是否是以string开头;

​    ​-(BOOL) hasSuffix : (NSString *) string: 判断一个字符串是否是以string结尾;

​    ​-(NSRange) rangeOfString:(NSString *) string; 模式匹配字符串,返回类型是结构体NSRange, 结构体 NSRange里有两个值都是整型的,location代表子字符串在

​    ​    ​    ​    ​    ​    ​    ​    ​    ​    ​    ​    ​原有字符串中的位置,length代表长度。

2014-07-31 16:20:56.786 HelloOC[1710:303] 匹配成功
2014-07-31 16:20:56.786 HelloOC[1710:303] 匹配成功
2014-07-31 16:20:56.787 HelloOC[1710:303] location = 3,  length = 3

​7.字符串的截取

​    -(NSString *) substringFromIndex : (NSUInteger) from 获取从字符串的开头到字符串结尾的字符串内容,不包含from位置的字符。

​    ​-(NSString *)substringToIndex : (NSUInterger) to  获取从字符串开头到字符串的to位置的字符串内容,包含to位置的字符;

​    ​-(NSString *) substringWithRange:(NSRange) range 根据NSRange这个范围来获取字符串;

​    ​事例代码如下:

​    ​

NSString *parent = @ "123456789" ;
//从一个位置截取字符串到结尾:可以从零开始
NSString *toEnd = [parent substringFromIndex:6];
NSLog(toEnd);
//从一个开头然后到传入的值
NSString *fromBegin = [parent substringToIndex:3];
NSLog(fromBegin);
//从一个位置截取指定长度
NSRange range = {3,3};
NSString *rangString = [parent substringWithRange:range];
NSLog(rangString);
2014-07-31 16:40:20.994 HelloOC[1813:303] 789
2014-07-31 16:40:20.994 HelloOC[1813:303] 123
2014-07-31 16:40:20.995 HelloOC[1813:303] 456

​8.字符串中的类型转换函数

​    ​-(double) doubleValue; 把字符串的内容转换为double类型

​    ​-(float) floatValue; 把相应的字符串转换为float类型

​    ​-(int) intValue;把相应的字符串转换为int类型

//转换为float
float strToFloat = [test floatValue];
NSLog(@ "strToFloat = %.9f" , strToFloat);
//转换为double
double strToDouble = [test doubleValue];
NSLog(@ "strToDouble = %.9f" , strToDouble);
2014-07-31 16:56:27.043 HelloOC[1914:303] strToInt = 1234
2014-07-31 16:56:27.044 HelloOC[1914:303] strToFloat = 1234.123413086
2014-07-31 16:56:27.044 HelloOC[1914:303] strToDouble = 1234.123456789

​9.字符串大小写转换函数

​-(NSString *)uppercaseString : 将字符全改成大写的;

​-(NSString *)lowercaseString : 将字符全改成小写的;

​-(NSString *)capitalizedString : 将首字母进行大写;

​代码事例:

2014-07-31 17:07:11.134 HelloOC[1961:303] HELLO WORLD
2014-07-31 17:07:11.134 HelloOC[1961:303] hello world
2014-07-31 17:07:11.134 HelloOC[1961:303] Hello World

10.字符串替换函数

-(NSString *)stringByReplacingOccurrencesOfString: (NSString *) target  withString : (NSString *) replacement; 把字符串target转换为replacement

​    ​-(NSString *)stringByReplacingCharactersInRange : (NSRange) range withString : (NSString *) replacement; 把指定范围内的字符串进行替换;

​    ​-(NSArray *) componentsSeparatedByString:(NSString *) separator:以字符串中的某个字符进行分割,返回数组对象

测试代码如下

//将字符串中特定的字符串换成指定的字符串
NSString *after = [string stringByReplacingOccurrencesOfString:@ "a" withString:@ "zzzzzz" ];
NSLog(after);
//将range范围内的字符串替换为相应的字符串
NSRange range = {0,6}; //从1开始到第6个
NSString *rangeString = [after  stringByReplacingCharactersInRange:range withString:@ "a" ];
NSLog(rangeString);
//分割字符串,把分割完的字符串存入数组中
NSArray *split = [string componentsSeparatedByString:@ "," ];
for ( int i = 0; i < [split count]; i++) {
NSLog(@ "%@" , [split objectAtIndex:i]);
出处: http://www.cnblogs.com/ludashi/ 本文版权归作者和共博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 收简历:某互联网公司,招聘iOS/Android靠谱工程师,入职后,可内部联系楼主,有小礼品赠送,有意者可邮箱投递简历:zeluli@foxmail.com