Objective-C之用C的字符来处理NSString相关的字符替换和拼接的问题

简介:

内容大纲:

  1、需求

  2、源代码

  3、附录

 

需求

使用Category给NSString类增加以下功能(需要用到的方法自己查资料或者猜)

1> 计算英文字母的个数(比如@"324fdsfk656HF99Jp"调用方法后返回的是9)
2> 字符串反转(比如@"abc"·   调用方法后返回@"cba")
3> 去掉字符串中所有的空格。
4> 截取网站域名中www.和.com之间的字符串(比如@"http://www.baidu.com"调用方法返回@"baidu")
5> 去除字符串两端空格(比如@" jack rose "调用方法后返回@"jack rose")

在直接看源代码之前,先大致讲讲该代码的有价值的地方:

1> 直接对NSString的替换字符或者移除字符的操作,都会重新开辟新的内存空间然后实例化NSString对象。

   这里采用C语言的字符来处理这些逻辑算法比较高效,避免了开辟比较大的内存。

   大概思路:NSString对象 -->  unchar  --> 相关的逻辑操作后 --> NSString对象

2> C语言指针字符数组不能直接动态的初始化长度,但是通过malloc是可以的。

源代码

main.m

复制代码
 1 #import <Foundation/Foundation.h>
 2 #import "NSString+calNum.h"
 3 
 4 int main(int argc, const char * argv[]) {
 5     @autoreleasepool {
 6         
 7         //测试1
 8         NSString *str1 = @"324fdsfk656HF99Jp";
 9         NSLog(@"%d",[str1 getNumCount]);
10         
11         //测试2
12         NSString* str2 = @"abc";
13         NSLog(@"%@",[str2 getRever]);
14         
15         //测试3
16         NSString* str3 = @" jack rose ";
17         NSLog(@"|%@|",[str3 removeSpace]);
18         
19         //测试4
20         NSString* str4 = @"http://www.baidu.com";
21         NSLog(@"%@",[str4 sub]);
22     }
23     return 0;
24 } 
复制代码

NSString+calNum.h

复制代码
 1 #import <Foundation/Foundation.h>
 2 
 3 @interface NSString (calNum)
 4 
 5 -(int)getNumCount;
 6 
 7 -(NSString *)getRever;
 8 //3> 去除字符串两端空格(比如@"  jack rose "调用方法后返回@"jack rose")
 9 
10 -(NSString*)removeSpace;
11 
12 //4> 截取网站域名中www.和.com之间的字符串(比如@"http://www.baidu.com"调用方法返回@"baidu")
13 -(NSString*)sub;
14 
15 -(NSString*)removeLRSpace;
16 
17 @end
复制代码

NSString+calNum.m

复制代码
 1 #import "NSString+calNum.h"
 2 
 3 @implementation NSString (calNum)
 4 
 5 -(int)getNumCount{
 6     int count = 0;
 7     int length = (int)[self length];
 8     
 9     for (int i = 0; i<length; i++) {
10         unichar c = [self characterAtIndex:i];
11         if (c>='0' && c<='9') {
12             count ++;
13         }
14     }
15     return count;
16     
17 }
18 
19 -(NSString *)getRever{
20     uint64_t i = 0;
21     uint64_t j = [self length]-1;
22     
23     unichar *character = malloc(sizeof([self characterAtIndex:0])*self.length);
24     
25     while (i<j) {
26         character[i] = [self characterAtIndex:j];
27         character[j] = [self characterAtIndex:i];
28         
29         i++;
30         j--;
31     }
32     if (i == j) {
33         character[i] = [self characterAtIndex:i];
34     }
35     return [NSString stringWithCharacters:character length:[self length]];
36 
37 }
38 
39 
40 -(NSString *)removeSpace{
41     uint64_t length = [self length];
42     int len = 0;
43     unichar *character = malloc((sizeof([self characterAtIndex:0])*self.length));
44     unichar c ;
45     int i= 0;
46     while (i<length) {
47         c = [self characterAtIndex:i];
48         if (c!=' ') {
49             character[len] = [self characterAtIndex:i];
50             len++;
51         }
52         i++;
53     }
54     
55     return [NSString stringWithCharacters:character length:len+1];
56 }
57 
58 
59 //4> 截取网站域名中www.和.com之间的字符串(比如@"http://www.baidu.com"调用方法返回@"baidu")
60 -(NSString *)sub{
61     NSString* str = [[self substringFromIndex:11] substringToIndex:5];
62     
63     return str;
64 }
65 
66 -(NSString *)removeLRSpace{
67     return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
68 }
69 
70 @end
复制代码

 

 

附录

有关的基础类库的string生态系统中经常用到且用错的重要组成部分: NSCharacterSet学习网址: http://nshipster.cn/nscharacterset/
 
 
 

相关文章
|
iOS开发
Objective-C中NSString与int和float的相互转换
NSString *tempA = @"123"; NSString *tempB = @"456";   1,字符串拼接  NSString *newString = [NSString stringWithFormat:@"%@%@",tempA,tempB];   2,字符转int...
881 0
|
iOS开发 索引
Objective-C: 字符串NSString与NSMutableString
      字符串算是OC中非常重要和常用的一部分内容,OC中的字符串与我之前在学习C,C++,Java中的字符串有一定的不同,它非常类似于C++中容器的概念,但用法却与之还是有很大的不同,也许是因为OC的语法就与其他我们常用的编程语言不尽相同。
648 0
|
iOS开发
objective-C: NSString应该用initWithFormat? 还是 stringWithFormat?
今天在看书上的一段代码时,发现NSString实例化时,有时用的是initWithFormat方法,有时用的是stringWithFormat,到底应该如何选择呢? 区别: 1、initWithFormat是实例方法 只能通过 NSString* str = [[NSString alloc]...
593 0
|
7月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
430 2
|
5月前
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
iOS Objective-C 应用连接Azure Storage时,若不关闭账号的匿名访问,程序能正常运行。但关闭匿名访问后,上传到容器时会出现错误:“Public access is not permitted”。解决方法是将创建容器时的公共访问类型从`AZSContainerPublicAccessTypeContainer`改为`AZSContainerPublicAccessTypeOff`,以确保通过授权请求访问。
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
|
7月前
|
缓存 开发工具 iOS开发
优化iOS中Objective-C代码调起支付流程的速度
优化iOS中Objective-C代码调起支付流程的速度
123 2
|
7月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
306 0
|
iOS开发 容器
iOS 代码规范格式 Objective-C(上)
iOS 代码规范格式 Objective-C
438 0
iOS 代码规范格式 Objective-C(上)