文章目錄
- 建立字串
- 類方法
- 擷取大小
- 比較的策略
- 不區分大小寫比較
- 如何判斷字串裡面還包含其他字串
NSString在前面已經說過是,是Cocoa中用來處理字串的類。下面就是NSString的一些常用方法及操作:
建立字串
NSString的stringWithFormat:方法就是通過格式字串和參數建立NSString的:
+ (id) stringWithFormat: (NSString *) format,...;
你可以按下面的使用,如:
NSString *height;
Height = [NSString stringWithFormat:@"your heightis %d feet", 5];
那得到的字串是“yourheight is 5 feet”
類方法
前面看到了stringWithFormat的定義,不知注意到了沒有,和我們以前聲明一個方法有兩個很大的區別:
第一個是參數用“,...”來結尾,這是表示它可以接多個參數;
第二個是方法前面不是“-”,而是“+”,這是什麼意思呢?這是表示它是一個類方法,這個方法屬於類對象(而不是執行個體對象)並且通常用於建立新的執行個體。這種用來建立新對象的類方法稱為Factory 方法。
擷取大小
NSString中的另一個執行個體方法是length,它返回的是字串中的字元個數。
- (unsigned int) length;
可以這樣使用它:
unsigned int len = [height length];
比較的策略
isEqualToString:可以用來比較接收方和當作參數傳遞來的符號。它返回一個BOOL型資料來表示兩個字串的內容是否相同。聲明如下:
- (BOOL) isEqualToString: (NSString *) aString;
舉例說明:
NSString *string1 = @"hello 5";
NSString *string2;
string2 = [NSString stringWithFormat: @"hello%d",5];
if([string1 isEqualToString:string2])
{
NSLog(@"They are same!");
}
compare:用來比較兩個字串,將接收對象和傳遞來的字串進行比較,返回一個NSComparisonResult(就是一個enum型資料)來顯示比較結果,聲明如下:
-(NSComparisonResult) compare:(NSString *) string;
傳回值的定義如下:
typedef enum _NSComparisonResult{
NSOrderedAscending = -1, // <升序
NSOrderedSame, // =等於
NSOrderedDescending // >降序
} NSComparisonResult;
備忘:如果比較兩個字串是否相等時,應該用isEqualToString,而不能僅僅只是比較字串的指標值。另外compare判斷的話只會根據第一個字元來進行判斷,比如100與90,那就是升序,abcdef與dc比較,也是升序。
不區分大小寫比較
compare:也可以進行區分大小寫比較,它還有一種重載,多了一個option參數,用來給我們更多的選擇與操作,方法具體定義如下:
-(NSComparisonResult) compare:(NSString *) string
option:(unsigned)mask;
options參數是一個位元遮罩,你可以使用位或運算子來添加選項標記,常用的選項如下:
NSCaseInsensitiveSearch:不區分大小寫字元。
NSLiteralSearch:進行完全比較,區分大小寫。
NSNumericSearch:比較字元呂的字元個數,而不是字元值。
例如:如果要進行字串的比較,要忽略大小寫但按字元個數的多少正確排序,那麼應該如下使用:
if([thing1compare:thing2
option: NSCaseInsensitiveSearch
| NSNumericSearch]
== NSOrderedSame)
{
NSLog(@“they match!”);
}
如何判斷字串裡面還包含其他字串
比如你要判斷一個檔案名稱裡面是否包含“.avi”,這樣可以判斷是否可以用播放器開啟它,再或者你想檢查一個檔案的開頭是否包含了一個字元“my”,來判斷它是否是你的文檔。那麼下面有兩個方法來協助進行判斷:一個是檢查字串是否以另一個字串進行開頭,另一個是檢查字串是否以另一個字串進行結尾:
-(BOOL) hasPrefix:(NSString *) aString;
-(BOOL) hasSuffix:(NSString *) aString;
那麼如何判斷字串中是否包含另一個字串呢?還有另一個函數:
-(NSRange) rangeOfString:(NSString *) aString;
返回的NSRange結構體,range.start為出現的第幾個位置,range.length為要比較的字串的長度,如果沒有找到,則range.start則等於NSNotFound。
可變的字串
NSString是不可變的,建立了之後就無法改變它,我們只能對它進行各種不影響其內容的操作,比如刪除字元或者添加字元來改變它。所以Cocoa提供了一個NSString的子類,叫做NSMutableString,如果定義的字串後面會發生改變,則使用這個子類。
使用類方法stringWithCapacity:來建立一個新的NSMutableString,聲明如下:
- (id) stringWithCapacity: (unsigned) capacity:
備忘:capacity只是一個最優的容量,定義了這個大小後,並不是說僅限於這麼大。
NSMutableString *string;
string = [NSMutableString stringWithCapacity: 42];
NSMutableString常用的操作有如下:
appendString:和appendFormat:來附加新字串,定義如下:
- (void)appendString: (Nsstring *) aString;
- (void) appendFormat: (NSString *) Format;
appendString 接受參數aString,然後將其複製到接受對象的末尾。
appendFormat類似,他將格式化的字串附加在接受對象的末尾,而不是建立新的對象。
deleteCharacterInRange:用來刪除字串中的字元,定義如下:
-(void)deleteCharactersInRange: (NSRange) range;
通常將deleteCharactersInRange:和rangeOfString:連在一起使用,NSMutableString可以使用NSString的全部功能,包括rangeOfString:、字串比較和其他任何功能。