无论是什么编程语言对字符串的操作是少不了的,对复杂的字符串的分析和操作我们可以用正则表达式来达到我们的目的。简单的字符串处理我们可以借助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精选字符串处理方法的更多相关文章

  1. shell截取字符串的方法

    参考文献: linux中shell截取字符串方法总结 [Linux]如何在Shell脚本中计算字符串长度? 截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${ex ...

  2. paip.截取字符串byLastDot方法总结uapi python java php c# 总结

    paip.截取字符串byLastDot方法总结uapi python java php c# 总结 ========uapi   left_byLastDot   right_byLastDot 目前 ...

  3. python字符串格式化方法 format函数的使用

      python从2.6开始支持format,新的更加容易读懂的字符串格式化方法, 从原来的% 模式变成新的可读性更强的 花括号声明{}.用于渲染前的参数引用声明, 花括号里可以用数字代表引用参数的序 ...

  4. JavaScript字符串分割方法

    使用split('')方法.此方法与Java的字符串分割方法方法名一样.

  5. ***用php的strpos() 函数判断字符串中是否包含某字符串的方法

    判断某字符串中是否包含某字符串的方法 if(strpos('www.idc-gz.com','idc-gz') !== false){ echo '包含'; }else{ echo '不包含'; } ...

  6. shell中截取字符串的方法总结

    shell中截取字符串的方法有很多种, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...

  7. python字符串replace()方法

    python字符串replace()方法 >>> help(str.replace)Help on method_descriptor:replace(...)    S.repla ...

  8. 【iOS】Swift字符串截取方法的改进

    字符串截取方法是字符串处理中经常使用的基本方法.熟悉iOS的朋友都知道在基础类的NSString中有substringToIndex:,substringFromIndex:以及substringWi ...

  9. 浅谈 js 字符串 trim 方法之正则篇

    原文:浅谈 js 字符串 trim 方法之正则篇 关于 trim 其实没啥好说的,无非就是去除首位空格,对于现代浏览器来说只是简单的正则 /^\s+|\s+$/ 就可以搞定了.而且支持中文空格   等 ...

随机推荐

  1. oracle导出一条二进制数据(二进制,long只能通过dmp导出)

    exp jxfoc/JXFOC@ORCL file=d:\dd.dmp tables=(jxfoc.FLIGHT_PLAN_MAKE_LOG,jxfoc.METAR_CONTENT_FOR_MAIL) ...

  2. java排序学习笔记

    前面写了js的排序实现,总得玩玩java的哈. 同样,冒泡.选择.快速(这三个之前实现过也写过文章).堆排序,然后做比较. 主要遇到的难点: - -||想轻松点写个封装计时的逻辑,不想每调用一个排序就 ...

  3. 续关于C#的微信开发的入门记录一

    前几天写了一篇博客<关于C#的微信开发的入门记录一>,原文地址:http://www.cnblogs.com/zhankui/p/4515905.html,现在继续完善: 目前很多小伙伴都 ...

  4. 1001. A+B Format (20)

    原题连接:https://www.patest.cn/contests/pat-a-practise/1001 题目如下: Calculate a + b and output the sum in ...

  5. 解决bootstrap模态框内输入框无法获取焦点

    bootstrap 模态框中的input标签在某些情况下会无法获取焦点. 最终解决方法:去除模态框的 tabindex="-1" 属性即可

  6. PHP 文件处理

    $handler = fopen('./abc.html', 'w'); if(!feof($handler)){ // 读取文件末尾,也可以用file_exists mkdir('./abc.htm ...

  7. C ReadProcessMemory

    ReadProcessMemory函数用于读取其他进程的数据. BOOL STDCALL ReadProcessMemory ( HANDLE hProcess, LPCVOID lpBaseAddr ...

  8. tcpdump的简单使用

    tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析 1.tcpdump host 192.168.8.49         获取主机192.168.8.49接收到和发出的所有分组 2. ...

  9. 从viewport发现小米手机参数不一致

    想要在移动web领域有所深造的小伙伴,第一关要过的就是逻辑像素与设备像素之间的关系. 初入移动web,一定要搞懂的几个单位(DPI.PPI.DP.PX 的详细计算方法及算法来源是什么?): dip(d ...

  10. .NET垃圾回收(GC)原理

    作为.NET进阶内容的一部分,垃圾回收器(简称GC)是必须了解的内容.本着“通俗易懂”的原则,本文将解释CLR中垃圾回收器的工作原理. 基础知识 托管堆(Managed Heap) 先来看MSDN的解 ...