使用Category给NSString类增加以下功能(需要用到的方法自己查资料或者猜)
1> 计算英文字母的个数(比如@"324fdsfk656HF99Jp"调用方法后返回的是9)
2> 字符串反转(比如@"abc"· 调用方法后返回@"cba")
3> 去除字符串两端空格(比如@" jack rose "调用方法后返回@"jack rose")
4> 截取网站域名中www.和.com之间的字符串(比如@"http://www.baidu.com"调用方法返回@"baidu")
在直接看源代码之前,先大致讲讲该代码的有价值的地方:
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 -(NSString*)removeSpace; 10 11 12 //4> 截取网站域名中www.和.com之间的字符串(比如@"http://www.baidu.com"调用方法返回@"baidu") 13 -(NSString*)sub; 14 15 16 @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 // unichar characters[self.length]; 23 unichar *characters = malloc(sizeof([self characterAtIndex:0]) * self.length); 24 while (i < j) { 25 characters[j] = [self characterAtIndex:i]; 26 characters[i] = [self characterAtIndex:j]; 27 i ++; 28 j --; 29 } 30 if(i == j) 31 characters[i] = [self characterAtIndex:i]; 32 return [NSString stringWithCharacters:characters length:self.length]; 33 34 } 35 36 -(NSString *)removeSpace{ 37 uint64_t length = [self length]; 38 int len = 0; 39 unichar *character = malloc((sizeof([self characterAtIndex:0])*self.length)); 40 unichar c ; 41 int i= 0; 42 while (i<length) { 43 c = [self characterAtIndex:i]; 44 if (c!=‘ ‘) { 45 character[len] = [self characterAtIndex:i]; 46 len++; 47 } 48 i++; 49 } 50 51 return [NSString stringWithCharacters:character length:len+1]; 52 } 53 54 //4> 截取网站域名中www.和.com之间的字符串(比如@"http://www.baidu.com"调用方法返回@"baidu") 55 -(NSString *)sub{ 56 NSString* str = [[self substringFromIndex:11] substringToIndex:5]; 57 58 return str; 59 } 60 @end
Objective-C之用C的字符来处理NSString相关的字符替换和拼接的问题
原文:http://www.cnblogs.com/goodboy-heyang/p/4946000.html