1. 程式人生 > >ios 字串分割

ios 字串分割

Objective-C裡核心的處理字串的類就是NSString和NSMutableString這兩個類,這兩個類完成了Objective-C中字串大部分功能的處理。這兩個類的最主要的區別是NSString建立賦值後不能動態修改長度和內容,除非給重新賦值。而NSMutableString類似與連結串列的,在建立賦值後可以進行修改長度,插入,刪除等操作。

注:以下程式碼執行環境是:XCode 4.3.2 ,iOS 5.1。

NSString提供了許多建立和初始化新字串的方法。下面這個是建立常量字串的。 它是編譯到可執行檔案中的NSString的例項,它不會在記憶體中消失。例子:

1、建立常量字串。

NSString *astring = @"我是字串";

2、NSString的記憶體地址

當我們宣告一個字串時,NSString *aString;
變數aString並不是真正包含一個字串物件,它是指向記憶體中字串物件的指標,我們稱之為物件識別符號,因為它是表示記憶體中的一個物件而不是儲存這個物件,指標是一個記憶體位置的地址,下面考慮用“==”來比較字串,來看個例子

        NSString *string1 = @"我是甲一號";

        NSString

 *string2 = @"我是甲一號";

        BOOL result = string1==string2;

        if(result){

            NSLog(@"address:%p", string1);

            NSLog(@"address:%p"

, string2);

        }

執行列印結果:

2012-07-30 09:36:41.337 objectiveC[613:403] yiyang:0x10485b478

2012-07-30 09:36:41.339 objectiveC[613:403] yiyang:0x10485b478

說明result的值是YES,這裡對比的是記憶體地址,@"我是甲一號"儲存在文字常量區,string1和string2都指向這個字串,所以指向的是同一個地址。


如果這樣做
NSString *string1 = @"我是甲一號";
NSString *string2 = string1;
BOOL result = string1==string2;

這時候result的值也YES了

看個例子就明白了。下面是字串記憶體地址的例子

[cpp]  view plain copy
  1. //記憶體指向  
  2.   NSString *bstring = @"我是字串";  
  3.   NSString *astring = [[NSString alloc] init];  
  4.   NSLog(@"astring point address:0x%.8x", astring);  
  5.   NSLog(@"bstring point address:0x%.8x", bstring);  
  6.   [email protected]"我是字串";  
  7.   NSLog(@"重新賦值之後的astring point address:0x%.8x", astring);  
  8.   NSLog(@"astring:%@",astring);  
列印結果如下:

[cpp]  view plain copy
  1. 2012-06-14 11:35:31.226 NSString[2316:f803] astring point address:0x00b72a7c  
  2. 2012-06-14 11:35:31.227 NSString[2316:f803] bstring point address:0x000045bc  
  3. 2012-06-14 11:35:31.227 NSString[2316:f803] 重新賦值之後的astring point address:0x000045bc  
  4. 2012-06-14 11:35:31.227 NSString[2316:f803] astring:我是字串  

重新賦值後,astring 的地址和bstring地址一樣了。

3、NSString字串的比較

在NSString中,最直接的就是用isEqualTostring這個方法

[cpp]  view plain copy
  1. NSString* string1 = @"我是甲一號";  
  2.    NSString *string2 = @"我是甲一號";  
  3.    BOOL result = [string1 isEqualToString:string2];  
  4.    if (result) {  
  5.        NSLog(@"字串相同");  
  6.    }  
列印結果:

[cpp]  view plain copy
  1. 2012-06-14 11:49:10.442 NSString[2481:f803] 字串相同  

另外一個比較的方法:compare,他可以比較字串的大小,它的返回型別是:NSOrderedAscending,NSorderedSame,NSorderedDescending(分別等於整數-1,0,1)。

[cpp]  view plain copy
  1. NSString* string1 = @"我是甲一號";  
  2.   NSString *string2 = @"我是甲一號";  
  3.   BOOL result = [string1 compare:string2];  
  4.   if (result == NSOrderedSame) {  
  5.       NSLog(@"字串相同");  
  6.   }  

4、字串分割:

[cpp]  view plain copy
  1. NSString *nstring = @"美國,加拿大,澳大利亞,辛巴威,埃及";  
  2.     NSArray *array = [nstring componentsSeparatedByString:@","];  
  3.     for (int i = 0; i < [array count]; i++) {  
  4.         NSLog(@"string:%@", [array objectAtIndex:i]);  
  5.     }  

結果:

[cpp]  view plain copy
  1. 2012-06-14 11:49:10.443 NSString[2481:f803] string:美國  
  2. 2012-06-14 11:49:10.443 NSString[2481:f803] string:加拿大  
  3. 2012-06-14 11:49:10.443 NSString[2481:f803] string:澳大利亞  
  4. 2012-06-14 11:49:10.443 NSString[2481:f803] string:辛巴威  
  5. 2012-06-14 11:49:10.444 NSString[2481:f803] string:埃及  

5、建立格式化字串

[cpp]  view plain copy
  1. int a = 100;  
  2.  int b = 8;  
  3.  NSString *astring = [[NSString alloc] initWithString:[NSString stringWithFormat:@"%d.這是第 %i 字串",a,b]];  
  4.  NSLog(@"astring:%@",astring);  
格式化輸出的符號

[cpp]  view plain copy
  1. %@     物件  
  2. %d, %i 整數  
  3. %u     無符整形  
  4. %f     浮點/雙字  
  5. %x, %X 二進位制整數  
  6. %o     八進位制整數  
  7. %zu    size_t  
  8. %p     指標  
  9. %e     浮點/雙字 (科學計算)  
  10. %g     浮點/雙字  
  11. %s     C 字串  
  12. %.*s   Pascal字串  
  13. %c     字元  
  14. %C     unichar  
  15. %lld   64位長整數(long long)  
  16. %llu   無符64位長整數  
  17. %Lf    64位雙字  
  18. %e 是實數,用科學計數法計的  

6、用標準c建立字串:initWithUTF8String方法

[cpp]  view plain copy
  1. char *Cstring = "我是字串";  
  2. NSString *astring = [[NSString alloc] initWithUTF8String:Cstring];  
  3. NSLog(@"astring:%@",astring);  
結果: 2012-06-14 13:47:23.956 NSString[2850:f803] astring: 我是字串


7、在串中搜索子串和替換

hasPrefixe 匹配字串頭
haSuffix     匹配字串的尾巴

[cpp]  view plain copy
  1. NSString *string1 = @"卡拉是條狗";  
  2.   NSString *string2 = @"狗狗叫卡拉";  
  3.   //字串以開頭比較  
  4.   if([string1 hasPrefix:@"卡拉"])  
  5.   {  
  6.       NSLog(@"字串string1以卡拉開頭");  
  7.   }  
  8.   //字串以結尾比較  
  9.   if([string2 hasSuffix:@"卡拉"])  
  10.   {  
  11.       NSLog(@"string2字串以卡拉結尾");  
  12.   }  


搜尋和替換

[cpp]  view plain copy
  1. NSString *string = @"我們是 gong產 主義 接班人";  
  2. NSString *temp = @"gong產";  
  3. NSString *me = @"我";  
  4. NSRange rang = [string rangeOfString:temp];  
  5. NSRange rang1 = [string rangeOfString:me];  
  6.   
  7. NSLog(@"搜尋的字串在string中起始點的index 為 %d", rang.location);  
  8. NSLog(@"搜尋的字串在string中結束點的index 為 %d", rang.location + rang.length);  
  9. NSLog(@"我 在字串 string中的起點的index  為 %d",rang1.location);  
  10.   
  11. //將搜尋中的字串替換成為一個新的字串  
  12. NSString *str = [string stringByReplacingCharactersInRange:rang withString:@"大產"];  
  13. NSLog(@"替換後字串為%@", str);  
  14.   
  15. //將字串中" " 全部替換成 *  
  16. str = [string stringByReplacingOccurrencesOfString :@" " withString:@"*"];  
  17. NSLog(@"替換後字串為%@", str);  

結果:

[cpp]  view plain copy
  1. 2012-06-14 14:07:44.762 NSString[3107:f803] 搜尋的字串在string中起始點的index 為 4  
  2. 2012-06-14 14:07:44.764 NSString[3107:f803] 搜尋的字串在string中結束點的index 為 9  
  3. 2012-06-14 14:07:44.764 NSString[3107:f803] 我 在字串 string中的起點的index  為 0  
  4. 2012-06-14 14:07:44.765 NSString[3107:f803] 替換後字串為我們是 大產 主義 接班人  
  5. 2012-06-14 14:07:44.765 NSString[3107:f803] 替換後字串為我們是*gong產*主義*接班人  

看到"我"字的index了嗎?第一位的索引值是0。


著作權宣告:本文由http://blog.csdn.net/totogo2010/原創,歡迎轉載分享。請尊重作者勞動,轉載時保留該宣告和作者部落格連結,謝謝!