Objective-C精选字符串处理方法
无论是什么编程语言对字符串的操作是少不了的,对复杂的字符串的分析和操作我们可以用正则表达式来达到我们的目的。简单的字符串处理我们可以借助OC中NSString封装好的字符串处理方法,不过前提是你得了解每个方法如何使用,以下做了一个简单的总结,便于以后使用。以下事例是原创代码,转载请注明出处。
1.字符串的创建
字符串的创建有多种方法,下面的例子中给了常用的几种字符串创建方法(还有好多)
1
2
3
4
5
6
|
//字符串创建工厂 NSString *str1 = [NSString stringWithFormat:@ "%d, %d" ,1,2]; NSString *str2 = [NSString stringWithString:@ "hello" ]; NSString *str3 = [NSString stringWithCString: "aaa" encoding:NSUTF8StringEncoding]; //普通方法 NSString *str4 = @ "hello" ; |
2.获取字符串的长度 -(unsigned int) length
1
2
|
NSString *str = @ "Hello" ; NSUInteger leng= [ str length]; |
3.字符串的比较 == 比较字符串的指针 isEqualToString 比较字符串的内容返回值是BOOL类型
以下来利用字符串的浅拷贝和深拷贝来测试上面的两个方法
retain:始终是浅复制。引用计数每次加一。返回对象是否可变与被复制的对象保持一致。
copy:对于可变对象为深复制,引用计数不改变;对于不可变对象是浅复制, 引用计数每次加一。始终返回一个不可变对象。
mutableCopy:始终是深复制,引用计数不改变。始终返回一个可变对象。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
NSString *string1 = @ "hello" ; NSString *string2 = [string1 mutableCopy]; NSString *string3 = [string1 copy]; //NSLog(string2); //NSLog(string3); //比较指针 if (string1 == string2) { NSLog(@ "指针相同" ); } else { NSLog(@ "string1通过深拷贝给string2所以指针不同" ); } //比较指针 if (string1 == string3) { NSLog(@ "string1通过浅拷贝给string3所以指针相同" ); } else { NSLog(@ "string1通过深拷贝给string3所以指针不同" ); } //比较内容 if ([string1 isEqualToString:string2] == YES) { NSLog(@ "string1 和 String2的内容相同" ); } else { NSLog(@ "string1 和 String2的内容不同" ); } |
运行结果:
1
2
3
|
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的内容相同 |
4.字符串的比较函数compare,
NSString下面的compare函数的返回值是一个枚举类型NSComparisonResult; NSOrderedAscending=-1, NSOrderedSame=0,NSOrderedDescending = 1 ; 对compare进行重载,可以传入option参数, 1 代表不区分大小写,2代表区分大小写,64代表比较字符串的个数而不是字符串的值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
//字符串比较函数compare NSString *strCompare1 = @ "abcde" ; NSString *strCompare2 = @ "bcdef" ; //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 ...;
下面是对上面两个函数的测试:
1
2
3
4
5
6
7
8
9
10
|
NSString *append1 = @ "I love " ; NSString *append2 = @ "china" ; //用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代表长度。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//字符串的查找 NSString *parent = @ "123456789" ; NSString *pre = @ "123" ; NSString *suf = @ "789" ; NSString *mid =@ "456" ; //匹配开头 if ([parent hasPrefix:pre] == YES) { NSLog(@ "匹配成功" ); } //匹配结尾 if ([parent hasSuffix:suf] == YES) { NSLog(@ "匹配成功" ); } //从中间匹配 NSRange range = [parent rangeOfString:mid]; NSLog(@ "location = %d, length = %d" , range.location, range.length); |
运行结果:
1
2
3
|
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这个范围来获取字符串;
事例代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//字符串的截取 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); |
运行结果如下:
1
2
3
|
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类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//字符串的类型转换 NSString *test = @ "1234.123456789" ; //转换为整数 int strToInt = [test intValue]; NSLog(@ "strToInt = %d" , strToInt); //转换为float float strToFloat = [test floatValue]; NSLog(@ "strToFloat = %.9f" , strToFloat); //转换为double double strToDouble = [test doubleValue]; NSLog(@ "strToDouble = %.9f" , strToDouble); |
运行结果:
1
2
3
|
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 : 将首字母进行大写;
代码事例:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//字符串的大小写转换 NSString *string = @ "hello world" ; //转换为大写 NSString *upper = [string uppercaseString]; NSLog(upper); //转换为小写 NSString *lower = [upper lowercaseString]; NSLog(lower); //首字母大写 NSString *begin = [upper capitalizedString]; |
运行结果:
1
2
3
|
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:以字符串中的某个字符进行分割,返回数组对象
测试代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//字符串替换函数 NSString *string = @ "abc,def,g" ; //将字符串中特定的字符串换成指定的字符串 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]); }
|
Objective-C精选字符串处理方法的更多相关文章
- shell截取字符串的方法
参考文献: linux中shell截取字符串方法总结 [Linux]如何在Shell脚本中计算字符串长度? 截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${ex ...
- paip.截取字符串byLastDot方法总结uapi python java php c# 总结
paip.截取字符串byLastDot方法总结uapi python java php c# 总结 ========uapi left_byLastDot right_byLastDot 目前 ...
- python字符串格式化方法 format函数的使用
python从2.6开始支持format,新的更加容易读懂的字符串格式化方法, 从原来的% 模式变成新的可读性更强的 花括号声明{}.用于渲染前的参数引用声明, 花括号里可以用数字代表引用参数的序 ...
- JavaScript字符串分割方法
使用split('')方法.此方法与Java的字符串分割方法方法名一样.
- ***用php的strpos() 函数判断字符串中是否包含某字符串的方法
判断某字符串中是否包含某字符串的方法 if(strpos('www.idc-gz.com','idc-gz') !== false){ echo '包含'; }else{ echo '不包含'; } ...
- shell中截取字符串的方法总结
shell中截取字符串的方法有很多种, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...
- python字符串replace()方法
python字符串replace()方法 >>> help(str.replace)Help on method_descriptor:replace(...) S.repla ...
- 【iOS】Swift字符串截取方法的改进
字符串截取方法是字符串处理中经常使用的基本方法.熟悉iOS的朋友都知道在基础类的NSString中有substringToIndex:,substringFromIndex:以及substringWi ...
- 浅谈 js 字符串 trim 方法之正则篇
原文:浅谈 js 字符串 trim 方法之正则篇 关于 trim 其实没啥好说的,无非就是去除首位空格,对于现代浏览器来说只是简单的正则 /^\s+|\s+$/ 就可以搞定了.而且支持中文空格 等 ...
随机推荐
- 华清远见成为ARM大学计划正式合作伙伴
来源:华清远见嵌入式学院 近日,华清远见教育集团成为ARM大学计划合作伙伴,这是ARM大学计划合作伙伴中的国内唯一教育机构.此次合作是ARM公司对华清远见教育集团的高度认可,也充分证明了华清远见这些年 ...
- 强制 history 不记住特定的命令
使用 HISTCONTROL 强制 history 不记住特定的命令将 HISTCONTROL 设置为 ignorespace,并在不想被记住的命令前面输入一个空格: # export HISTCON ...
- Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sS ...
- Android带边框表格的实现
最近做项目需要用到表格,数据是动态指定的,本来用GridView是很方便的,可是老大不同意用这么重量级的控件,想办法吧. 做表格很容易想到用TableLayout,那就自定义一个来搞. 一.表格最蛋疼 ...
- JVM中对象的销毁
1.可达性分析算法: 可达性分析算法用来寻找将要销毁的对象,它的基本思路是:通过一系列的称为“GC ROOTs”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径成为引用链,当一个对象到GC ...
- php函数类型
静态变量: <?php function calcute(){ static $num =10; $num = $num+2; echo $num."<br>"; ...
- Android课程---序列化与反序列化(转)
ava序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的 ...
- 6.数组和Hash表
当显示多条结果时,存储在变量中非常智能,变量类型会自动转换为一个数组. 在下面的例子中,使用GetType()可以看到$a变量已经不是我们常见的string或int类型,而是Object类型,使用-i ...
- 通过js实现回到顶部功能
许多商城网址,当我们滚动到一定高度时,我们会发现一般会出现一个回到顶部的js选项,点击轻松实现回到顶部,交互效果会显得比较人性化,且回到顶部过程中若在滚动滚动条时可以停止滚动,现在让我们来实现吧 我总 ...
- 前nginx后Apache+Node反向代理
前几天一直在被一个问题困扰,机器上跑的站点太多了,Apache上面有十几个,NodeJS的也有一堆,记端口号都要烦死,于是萌生了使用反向代理的想法.出发点貌似太low了,完全不是出于负载均衡.高并发什 ...