Objective-C 日记③ 字符串
一、創建字符串、類方法
公式創建NSString
+(id) stringWithFormat:(NSString *) format,……;
eg:
NSString *height;
height=[NSString stringWithFormat:@"高度是: %d 長度: %d",10,20];
得到的字符串:“高度是: 10 長度: 20”
?
注意:
省略號:表示可以接收多個參數,類似NSLog();
加號:“+” Object-C運行時生成一個類的時候,會創建一個代表該類的類對象(類對象包含:指向超類的指針、類名、指向類方法列表的指針)
如何在聲明方法時添加了加號,該方法就為類方法.這個方法屬于類對象(而不是類的實例對象),常用于創建新的實例。我們稱這種用來創建新對象的類方法為工廠方法(stringWithFormat就是一個工廠方法)
?
如果該方法將會在某個對象實例中運行 方法用前導減號(-)來開始聲明
如果創建一個實例對象或者訪問一些全局類數據,建議使用前導加號(+)將它聲明為類的方法
二、關于大小、字符串比較
關于大小:
NSString中包含一個方便的方法length,返回的是字符串中的字符個數
使用:unsigned int length = [height length];
說明:NSString的length方法能夠準確無誤處理國際字符串:比如中文以及使用Unicode國際字符標準的字符串這點和C語言不同,C語言可能出現一個字符占用的空間可能多于一個字符
?
字符串比較:
A:isEqualToString:用來比較接收方和當作參數傳遞來的字符串。返回一個BOOL(YES or NO 不是true,false)類型來表示字符串內容是否相同。格式:-(BOOL) isEqualToString:(NSString *) aString;
eg:
NSString *str1 = @"hello pepe";NSString *str2=[NSString stringWithFormat:@"hello %s","pepe"];if([str1 isEqualToString:str2]){NSLog(@"相同");}else{NSLog(@"不同");}結果當然是“相同”
?????
B:compare方法 聲明如下:-(NSComparisonResult) compare: (NSString *) string
?compare將接收對象和傳遞來的字符串逐個字符的進行比較,返回一個NSComparisonResult(enum型數據)來顯示比較結果。
eg:
BOOL result=[@"kaka" compare: @"pepe"];NSLog(@"%s","kaka vs pepe");NSLog(@"%d",result);result=[@"kaka" compare: @"kaka"];NSLog(@"%s","kaka vs kaka");NSLog(@"%d",result);result=[@"pepe" compare: @"kaka"];NSLog(@"%s","pepe vs kaka");NSLog(@"%d",result);
結果:
??????
注意:
比較兩個字符串是否相等時請用isEqualToString:而不能僅僅比較字符串的指針值;
eg: ? ?
if([str1 isEqualToString:str2]){???NSLog(@"相同"); }???????????????????????????? VS????? ? ? if( str1==str2){? NSLog(@"相同");??? }
注意二者的區別:1、==運算符只判斷str1和str2的指針數值,而不是它們所指的對象
2、如果想檢查兩個對象的標識此時可以使用==
3、如果想查看等價性使用isEqualToString
?? ??? ???
?? ? ?
compare 比較字符串返回的結果有下面幾種:
? ? ? ? ? ?
?
C:不區分大小寫比較
-(NSComparisonResult) compare: (NSString *) string options: (unsigned) mask;??[k?m'p?ris?n]??比較;對照;比喻;比較關系
options參數是一個位掩碼,可以使用位或運算符(|)來添加選項標記:
NSCaseInsensitiveSearch:不區分大小寫比較; ?[in'sens?tiv]?adj. 感覺遲鈍的,對…沒有感覺的
NSLiteralSearch:進行完全比較,區分大小寫; ? ?['lit?r?l]?adj. 文字的;逐字的;無夸張的
NSNumericSearch:比較字符串字符個數,而不是字符值;??[nju:'merik]?數;數字?adj. 數值的(等于mumerical);數字的
?
eg:
? ? ? ? ? ? ? ?
?
?
? D:字符串中是否包含其他字符串
查詢頭尾是否包含某字符串:hasPrefix 、hasSuffix
-(BOOL) hasPrefix :(NSString * ) string; ?檢查字符串是否以某個字符串開頭。 ? ? ? ??[,pri:'fiks, 'pri:fiks]?加前綴;將某事物加在前面
-(BOOL) hasSuffix: (NSString *) string; ? 檢查字符串是否以某個字符串結尾。 ? ? ? ? ['s?fiks, s?'fiks]?vt. 添后綴?n. [語]后綴;下標
? eg:
? ? ? ? ? ?
? 查詢字符串內是否包含某字符串:rangeOfString 返回一個NSRange struct可以告訴你字符串相匹配的部分在哪里以及匹配的字符個數
-(NSRange) rangeOfString:(NSString *) string;
location用來存放字段范圍的起始位置
length是該范圍內所含元素的個數
eg:
? ? ? ? ??
?
三、可變性 ?
NSString是不可變的字符串,如果需要使用可變字符串,Cocoa提供了一個NSString子類NSMutableString。
格式
-(id) stringWithCapacity:(unsigned) capacity;
可通過appendString、appendFormat來添加新字符串:-(void)appendString:(NSString *)string ; -(void) appendFormat:(NSString *)format……;
說明:
appendString接收參數string,然后將其復制到字符串對象的結尾
appendFormat與stringWithFormat類似,但它是將格式化的字符串附加到接收字符串的尾部,而不是創建新的字符串對象;
eg:
? ? ? ? ?
使用deleteCharactersInRange方法刪除字符串中的字符:
-(void)deleteCharactersInRange:(NSRange) range;
因NSMutableString是NSString的子類所以NSString的方法NSMutableString都可以使用
eg:
? ? ? ? ?
?
?
?
?
?
?
?
?
?
?
?
?
?
作者:PEPE
出處:http://pepe.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
總結
以上是生活随笔為你收集整理的Objective-C 日记③ 字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ANOI 2009 【同类分布】
- 下一篇: 12.10课堂学习----实例化、构造方