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
BOOL result = string1==string2;
if(result){
NSLog(@"address:%p", string1);
NSLog(@"address:%p"
}
執行列印結果:
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
- //記憶體指向
- NSString *bstring = @"我是字串";
- NSString *astring = [[NSString alloc] init];
- NSLog(@"astring point address:0x%.8x", astring);
- NSLog(@"bstring point address:0x%.8x", bstring);
- [email protected]"我是字串";
- NSLog(@"重新賦值之後的astring point address:0x%.8x", astring);
- NSLog(@"astring:%@",astring);
[cpp] view plain copy
- 2012-06-14 11:35:31.226 NSString[2316:f803] astring point address:0x00b72a7c
- 2012-06-14 11:35:31.227 NSString[2316:f803] bstring point address:0x000045bc
- 2012-06-14 11:35:31.227 NSString[2316:f803] 重新賦值之後的astring point address:0x000045bc
- 2012-06-14 11:35:31.227 NSString[2316:f803] astring:我是字串
重新賦值後,astring 的地址和bstring地址一樣了。
3、NSString字串的比較
在NSString中,最直接的就是用isEqualTostring這個方法
[cpp] view plain copy
- NSString* string1 = @"我是甲一號";
- NSString *string2 = @"我是甲一號";
- BOOL result = [string1 isEqualToString:string2];
- if (result) {
- NSLog(@"字串相同");
- }
[cpp] view plain copy
- 2012-06-14 11:49:10.442 NSString[2481:f803] 字串相同
另外一個比較的方法:compare,他可以比較字串的大小,它的返回型別是:NSOrderedAscending,NSorderedSame,NSorderedDescending(分別等於整數-1,0,1)。
[cpp] view plain copy- NSString* string1 = @"我是甲一號";
- NSString *string2 = @"我是甲一號";
- BOOL result = [string1 compare:string2];
- if (result == NSOrderedSame) {
- NSLog(@"字串相同");
- }
4、字串分割:
[cpp] view plain copy- NSString *nstring = @"美國,加拿大,澳大利亞,辛巴威,埃及";
- NSArray *array = [nstring componentsSeparatedByString:@","];
- for (int i = 0; i < [array count]; i++) {
- NSLog(@"string:%@", [array objectAtIndex:i]);
- }
結果:
[cpp] view plain copy
- 2012-06-14 11:49:10.443 NSString[2481:f803] string:美國
- 2012-06-14 11:49:10.443 NSString[2481:f803] string:加拿大
- 2012-06-14 11:49:10.443 NSString[2481:f803] string:澳大利亞
- 2012-06-14 11:49:10.443 NSString[2481:f803] string:辛巴威
- 2012-06-14 11:49:10.444 NSString[2481:f803] string:埃及
5、建立格式化字串
[cpp] view plain copy
- int a = 100;
- int b = 8;
- NSString *astring = [[NSString alloc] initWithString:[NSString stringWithFormat:@"%d.這是第 %i 字串",a,b]];
- NSLog(@"astring:%@",astring);
[cpp] view plain copy
- %@ 物件
- %d, %i 整數
- %u 無符整形
- %f 浮點/雙字
- %x, %X 二進位制整數
- %o 八進位制整數
- %zu size_t
- %p 指標
- %e 浮點/雙字 (科學計算)
- %g 浮點/雙字
- %s C 字串
- %.*s Pascal字串
- %c 字元
- %C unichar
- %lld 64位長整數(long long)
- %llu 無符64位長整數
- %Lf 64位雙字
- %e 是實數,用科學計數法計的
6、用標準c建立字串:initWithUTF8String方法
[cpp] view plain copy
- char *Cstring = "我是字串";
- NSString *astring = [[NSString alloc] initWithUTF8String:Cstring];
- NSLog(@"astring:%@",astring);
7、在串中搜索子串和替換
hasPrefixe 匹配字串頭
haSuffix 匹配字串的尾巴
[cpp] view plain copy
- NSString *string1 = @"卡拉是條狗";
- NSString *string2 = @"狗狗叫卡拉";
- //字串以開頭比較
- if([string1 hasPrefix:@"卡拉"])
- {
- NSLog(@"字串string1以卡拉開頭");
- }
- //字串以結尾比較
- if([string2 hasSuffix:@"卡拉"])
- {
- NSLog(@"string2字串以卡拉結尾");
- }
[cpp] view plain copy
- NSString *string = @"我們是 gong產 主義 接班人";
- NSString *temp = @"gong產";
- NSString *me = @"我";
- NSRange rang = [string rangeOfString:temp];
- NSRange rang1 = [string rangeOfString:me];
- NSLog(@"搜尋的字串在string中起始點的index 為 %d", rang.location);
- NSLog(@"搜尋的字串在string中結束點的index 為 %d", rang.location + rang.length);
- NSLog(@"我 在字串 string中的起點的index 為 %d",rang1.location);
- //將搜尋中的字串替換成為一個新的字串
- NSString *str = [string stringByReplacingCharactersInRange:rang withString:@"大產"];
- NSLog(@"替換後字串為%@", str);
- //將字串中" " 全部替換成 *
- str = [string stringByReplacingOccurrencesOfString :@" " withString:@"*"];
- NSLog(@"替換後字串為%@", str);
結果:
[cpp] view plain copy
- 2012-06-14 14:07:44.762 NSString[3107:f803] 搜尋的字串在string中起始點的index 為 4
- 2012-06-14 14:07:44.764 NSString[3107:f803] 搜尋的字串在string中結束點的index 為 9
- 2012-06-14 14:07:44.764 NSString[3107:f803] 我 在字串 string中的起點的index 為 0
- 2012-06-14 14:07:44.765 NSString[3107:f803] 替換後字串為我們是 大產 主義 接班人
- 2012-06-14 14:07:44.765 NSString[3107:f803] 替換後字串為我們是*gong產*主義*接班人
看到"我"字的index了嗎?第一位的索引值是0。