objective-c 基礎教程 這本書可以說是iphone ios開發入門的經典基礎教程。半年前看過,現在學習iphone開發有一段時間了,如今重讀這本書,感覺還是有很多收穫,寫筆記有兩個目的,一是方便自己寫程序的時候查看,第二是幫助初學者查看,鑑於此,筆記中會加入我自己的一些內容,以方便初學者。對於已有編程經驗的人來說,這本書前面7章都可以當小說一樣看過。
寫程序其中估計有50%都是在處理字符串。字符串處理對掌握一門語言或者一個平臺都是非常重要的。以前在symbian上開發程序,因爲經常會在symbian字符串和標準C字符串中轉換。而又沒有現成的可用代碼。只能自己封裝,這畫了不少精力和時間。在iphone開發中用不着這麼痛苦,系統爲我們提供了強大的字符串處理函數。
1:創建字符串,
最常用的莫過於直接把一個常量字符串付給一個變量,比如 :NSString * tmp = @"Hello, World!!" ;
其次是使用類方法 +(id) stringWithFormat:(NSString *) format,⋯;
比如:
int h = 178;
NSString * height = [NSString stringWithFormat:@"Your height is %d cm",h ];
2:獲取字符串的長度
- (unsigned int)length;
sdk中幫助文檔並不是這樣定義的,而是:- (NSUInteger)length。
而NSUInteger的定義是:
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef unsigned long NSUInteger;
#else
typedef unsigned int NSUInteger;
#endif
3:字符串比較
A: - (BOOL)isEqualToString:(NSString *)aString
兩個字符串相同返回YES,不同返回NO。
B:- (NSComparisonResult)compare:(NSString *)aString
其中NSComparisonResult定義如下:
typedef enum _NSComparisonResult {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
}NSComparisonResult;
這個比價反映了兩個字符串的大小關係,比如 [@"aardvark" compare:@"zygote"]將返回NSOrderedAscending。C:不區分大小寫的比較:compare:options:
options是一個位掩碼,常用選項如下:
NSCaseInsensitiveSearch, 不區分大小寫。
NSLiteralSearch, 進行完全比較,區分大小寫。
NSNumericSearch.比較字符串的字符個數,而不是字符值。
不區分大小寫比較也可以用函數 - (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString。
D:字符串中是否有別的字符串,字符串查找
- (BOOL)hasPrefix:(NSString *)aString 是否以一個字符串開頭
- (BOOL)hasSuffix:(NSString *)aString 是否以一個字符串結尾。
- (NSRange)rangeOfString:(NSString *)aString 查找一個字符串的起始位置。如果沒找到返回{NSNotFound,0}
4:從一個字符串獲取子字符串,
- (NSString *)substringFromIndex:(NSUInteger)anIndex:從指定位置開始到字符串結束
- (NSString *)substringToIndex:(NSUInteger)anIndex 從字符串開始第一個到指定位置。
- (NSString *)substringWithRange:(NSRange)aRange 取一個字符串中間的一部分。
例子:
int main(int argc, char *argv[])
{
int h = 178;
NSString * height = [NSString stringWithFormat:@"YourHeightIs %d cm",h ];
NSRange rang = [height rangeOfString:@"Height"];
if(rang.location !=NSNotFound)
{
NSLog(@"%@",[height substringWithRange:rang]);
NSLog(@"%@",[height substringFromIndex:rang.location+rang.length]);
}
return (0);
}
這個例子演示了字符串的基本用法包括查找和取子字符串。結果:
Height
Is 178 cm
5:字符串連接:
- (NSString *)stringByAppendingString:(NSString *)aString
- (NSString *)stringByAppendingFormat:(NSString *)format ...
6:可變字符串
NSString是不可變的,意味着一旦創建好,就不能再改變,不能對它刪除或者重置。
Cocoa 提供了NSString的子類NSMutableString,可以實現可變字符串。NSMutableString常見方法。
+ (id)stringWithCapacity:(NSUInteger)capacity 創建一個字符串並指定最大長度。
- (void)appendString:(NSString *)aString 追加字符
- (void)appendFormat:(NSString *)format ... 按格式追加字符
- (void)deleteCharactersInRange:(NSRange)aRange 刪除指定位置的字符。
- (void)insertString:(NSString *)aString atIndex:(NSUInteger)anIndex 在指定位置插入字符
- (void)replaceCharactersInRange:(NSRange)aRange withString:(NSString *)aString 替換指定位置的字符
- (void)setString:(NSString *)aString 重置字符串。