Objective-C 征途:String Party

        這是Objective-C Party系列的第二篇,在這裏,我會介紹數據類型的一個元素------字符串。字符串在開發編程的過程中,幾乎是不可或缺的,其實Objective-C上的字符串與其他開發語言的字符串沒有太大的分別,都是用來顯現數據的!Cocoa中用來處理字符串的類就是NSString,我會在這裏介紹NSString的創建、獲取大小、比較、搜索字符、可變性,通過這一部分的學習,我們就可以大概掌握NSString日常出現得比較頻繁的用法!

        1.創建

         用得比較多的一個類方法就stringWithFormat:,stringWithFormat:就是一個工程方法,它會根據你提供的參數創建新的NSString對象。當然還有其他很多方法來創建NSString,但就不再這裏詳述了,大家有興趣可以查看IOS SDK幫助文檔。

NSString *message = [[NSString alloc]initWithFormat:@"I am a Objective-C developer!"];
+(id)stringWithFormat:(NSString *)format,...;

         再看stringWithFormat:的原型,首先要注意的地方時,stringWithFormat:函數是用前導加號(+)來開始聲明,就是說stringWithFormat:是一個類方法;第二個就原型末尾的參數表示省略號(...),表示該函數接受多個參數來格式化、生成新的NSString對象。

        

         2.獲取大小

         這裏獲取大小所要說的內容比較少,就是獲取字符串的字符長度,方法返回的是字符串中字符的個數(無符號整形),我直接上一段代碼。

unsigned int length = [message length];

         

         3.比較

          比較是字符串常見的操作。但在比較的過程中,有些程序員習慣性地使用‘==’比較符號來比較兩個字符串,如果在C#或者java開發語言上,可能會得到你想要的結果,但是Objective-C是C語言的擴展集,對字符串的處理也沿用了C語言的風格。使用‘==’來比較兩個字符串,只是比較他們的指針值,而不是他們的值。

 

NSString *string1 = @"hello string1";
    NSString *string2 ;
    string2 = [[NSString alloc]initWithFormat:@"%@",string1];
    if([string1 isEqualToString:string2])
    {
        NSLog(@"They are same!");
    }
    else {
        NSLog(@"They are not the same!");
    }

         

          如果按照這樣的方法來輸出結果:They are same!

          把isEqualToString:改成==,得到的結果卻是:They are not the same!

          箇中的原理,我想大家也很瞭解了!用於比較的方法還有一個,是很有用的:

 

- (NSComparisonResult) compare:(NSString *)string;

         

          compare:將接收對象和傳遞來的字符串逐個字符地進行比較,返回一個NSComparisonResult(就是一個enum型數據)來顯示比較結果:

 

typedef enum _NSComparisonResult {
     NSOrderedAscending = -1,
     NSOrderedSame,
     NSOrderedDesending
}NSComparisonResult;

        

         compare:進行的是區分大小寫的比較。Objective-C還有一個方法compare:options:,它能給我們更多的控制權。options參數是一個位掩碼。你可以使用或運算符(|)來添加選項標記。常用的選項:

          *  NSCaseInsensitiveSearch: 不區分大小寫字符。

          *  NSLiteralSearch:  進行完全比較,區分大小寫。

          *  NSNumericSearch:  比較字符串的字符個數,而不是字符值。

          如果你想忽略大小寫和字符個數,那麼就可以這樣編寫代碼:

 

if([string1 compare:string2 options:NSCaseInsensitiveSearch|NSNumericSearch]==NSOrderedSame)
{
    NSLog(@"They are match!");
}

        
        4.可變性

      NSString是不可變的,但是你可以用它來生成新的對象,查找字符等。但是你不能以刪除或者增加字符的形式來改變它。所以Objective-C考慮到這一點,添加了NSString的一個子類:NSMutableString。使用NSMutableString可以預分配一塊內存去存儲它,這樣後續的操作就會快很多。

 

NSMutableString *string3 = [NSMutableString stringWithCapacity:50];
[string3 appendString:@"I like "];
[string3 appendFormat:@"%@",@"IOS"];

        先看一下上面的例子。第一行,首先創建了NSMutableString對象,要注意的是50這個參數是要來有何用的呢?50是NSMutableString對象初始化的時候預分配的一個字符長度,也就是說,可以在NSMutableString對象中添加50個字符。這裏並沒有把對象的長度給定死,而是一個參考,如果對象的長度超過了50,便會自動增加自身的容量。

再看看第二、第三行代碼,這裏的原型是:

 

- (void) appendString: (NSString *) aString;
- (void) appendFormat: (NSString *) format,...;


        都是用以給NSMutableString對象添加字符的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章