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]); }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ios 技术积累

Objective-C 数组对象排序

NSSortDescriptor可以根据数组中对象的属性来排序 为排序数组的每个属性创建NSSortDescriptor对象,将所有这些对象放入一个数组中,该...

17940
来自专栏liukaili_666888999

@property (copy) NSMutableArray *array; 这个写法会出什么问题

11460
来自专栏wOw的Android小站

[Objective-C] id类型和instancetype类型

id数据类型可以存储任何类型的对象。可以说,它是一般对象类型。 例如可以声明一个为id类型的变量:

11710
来自专栏数据结构与算法

codevs4919 线段树练习4

 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 给你N个数,有两...

28650
来自专栏青玉伏案

Objective-C中的继承和多态

   面向对象编程之所以成为主流的编程思想和他的继承和多态是分不开的,只要是面向对象语言都支持继承和多态,当然不同的OOP语言之间都有其特点。OC中和Java类...

22480
来自专栏赵俊的Java专栏

合并区间

21730
来自专栏函数式编程语言及工具

Scalaz(27)- Inference & Unapply :类型的推导和匹配

 经过一段时间的摸索,用scala进行函数式编程的过程对我来说就好像是想着法儿如何将函数的款式对齐以及如何正确地匹配类型,真正是一种全新的体验,但好像有点太偏...

21380
来自专栏iOS 开发杂谈

iOS 泛型 ObjectType 协变 __covariant 逆变 __contravariant

__covariant(协变):用于泛型数据强转类型,可以向上强转,子类可以转成父类。 __contravariant(逆变):用于泛型数据强转类型,可以向下...

41730
来自专栏TechBox

浅析对象等同性判断

23340
来自专栏猿人谷

OC字符串常用函数

创建一个字符串对象: NSstring * str1 = @"hello"; NSString * str = [[NSString alloc]initWit...

207100

扫码关注云+社区

领取腾讯云代金券