Objective-C文法之字串NSString

來源:互聯網
上載者:User

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] address:0x10485b478

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

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

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

這時候result的值也YES了

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

  //記憶體指向    NSString *bstring = @"我是字串";    NSString *astring = [[NSString alloc] init];    NSLog(@"astring point address:0x%.8x", astring);    NSLog(@"bstring point address:0x%.8x", bstring);    astring=@"我是字串";    NSLog(@"重新賦值之後的astring point address:0x%.8x", astring);    NSLog(@"astring:%@",astring);

列印結果如下:

2012-06-14 11:35:31.226 NSString[2316:f803] astring point address:0x00b72a7c2012-06-14 11:35:31.227 NSString[2316:f803] bstring point address:0x000045bc2012-06-14 11:35:31.227 NSString[2316:f803] 重新賦值之後的astring point address:0x000045bc2012-06-14 11:35:31.227 NSString[2316:f803] astring:我是字串

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

3、NSString字串的比較

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

 NSString* string1 = @"我是甲一號";    NSString *string2 = @"我是甲一號";    BOOL result = [string1 isEqualToString:string2];    if (result) {        NSLog(@"字串相同");    }

列印結果:2012-06-14 11:49:10.442 NSString[2481:f803] 字串相同 

4、字串分割:

NSString *nstring = @"美國,加拿大,澳大利亞,津巴布韋,埃及";    NSArray *array = [nstring componentsSeparatedByString:@","];    for (int i = 0; i < [array count]; i++) {        NSLog(@"string:%@", [array objectAtIndex:i]);    }

結果:

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、建立格式化字串

   int a = 100;    int b = 8;    NSString *astring = [[NSString alloc] initWithString:[NSString stringWithFormat:@"%d.這是第 %i 字串",a,b]];    NSLog(@"astring:%@",astring);

格式化輸出符號

%@     對象%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方法

    char *Cstring = "我是字串";    NSString *astring = [[NSString alloc] initWithUTF8String:Cstring];    NSLog(@"astring:%@",astring);

結果:2012-06-14 13:47:23.956 NSString[2850:f803] astring:我是字串

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

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

  NSString *string1 = @"卡拉是條狗";    NSString *string2 = @"狗狗叫卡拉";    //字串以開頭比較    if([string1 hasPrefix:@"卡拉"])    {        NSLog(@"字串string1以卡拉開頭");    }    //字串以結尾比較    if([string2 hasSuffix:@"卡拉"])    {        NSLog(@"string2字串以卡拉結尾");    }

搜尋和替換

    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);
結果:
2012-06-14 14:07:44.762 NSString[3107:f803] 搜尋的字串在string中起始點的index 為 42012-06-14 14:07:44.764 NSString[3107:f803] 搜尋的字串在string中結束點的index 為 92012-06-14 14:07:44.764 NSString[3107:f803] 我 在字串 string中的起點的index 為 02012-06-14 14:07:44.765 NSString[3107:f803] 替換後字串為我們是 大產 主義 接班人2012-06-14 14:07:44.765 NSString[3107:f803] 替換後字串為我們是*gong產*主義*接班人

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.