相比於C語言來說,通常面向對象的語言都有一種類型來專門的處理字符串類型,如C++的string,JAVA的String.. Objectiver-C 天然也有種類型來專門處理字符串,叫作NSString。數組
Objective-C中的字符串也分爲兩種:NSString(不可變字符串),NSMutableString(可變字符串),NSMutableString類是NSString的一個子類。app
注:Objective-C中的字符串 都須要用@"內容",前邊必需要用一個@spa
(1)NSString--------不可變字符串指針
//初始化 component
NSString *str1 = @"123"; //直接賦值orm
NSString *str2 = [[NSString alloc] initWithFormat:str1];//根據字符串str1來建立字符串對象
/*繼承
這種方法也是根據字符串str1來建立字符串字符串
可是與上方的定方法不一樣的是:用 stringWithFormat 方法建立的字符串被稱爲 臨時字符串string
由於用這種方法建立的字符串會隨時釋放,在之後的iOS中,很難控制
*/
NSString *str3 = [NSString stringWithFormat:str1];//這表示字符串str3是根據str1創建的,至關於把str1的值賦給str3
將C語言的字符數組或者字符指針轉換成NSString
/*
將C語言中的字符數組char[]或者字符指針char *轉變成 NSString
方法是: [[NSString alloc] initWithUTF8String:(const char *)]
*/
NSString *str4 = [[NSString alloc] initWithUTF8String:p];//將字符指針p轉換成NSString
//字符串比較是否相等
BOOL b = [str4 isEqualToString:str1];//返回YES(1) NO(0)
//字符串比較大小
/*
方法是:str1 compare:(NSString *),返回類型是 NSComparisonResult
須要用NSComparisonResult來接收結果,該類型是一個枚舉
枚舉的值是:
NSOrderedSame:相等
NSOrderedAsend:小於
NSOrderedDescending:大於
*/
NSComparisonResult result = [@"123" compare:@"123"]; //這是比較 字符串@「123」 和 字符串@「123」的大小
//字符串中查找子串
/*
方法:str5 rangeOfString:(NSString *)
該方法返回類型是 NSRage,該類型是一個結構體
結構體的元素:
location 表示位置
length 表示長度
*/
//下例表示在str5中查找子串@「my」,而且返回一個NSRange類型,從而獲取位置以及長度
NSString *str5 = @"This is my Objective-C Project";
NSRange range = [str5 rangeOfString:@"my"];
int location = (int)range.location; //location是接受@」my「在str5中的位置(實際是下標)
int length = (int)range.length; //length是長度
//在字符串中提取字符串
/*
方法:[ str6 substringToIndex:(NSUInteger)]
從 str6 中提取從第0位到第6位的字符串,生成新的字符串,返回地址
注:此處的範圍是[0,6)(此範圍是下標範圍)
str6 = @"0123456789";
結果:str7 = @"012345"
*/
NSString *str7 = [str6 substringToIndex:6];
/*
方法:[str6 substringFromIndex:(NSUInteger)]
從 str6 中提取從弟6位到末尾的字符串,生成新的字符串,返回地址
注:此處的範圍是[6,n];(此範圍是下標範圍)
str6 = @"0123456789";
結果是: str9 = @"6789";
*/
NSString *str8 = [str6 substringFromIndex:6];
/*
方法:[str6 substringWithRange:(NSRange)]
這個方法的含義是:截取從第NSRange.location個元素開始,截取長度是NSRange.length
返回地址
下例表示:從str6中 從第4個開始截取長度爲5個的字符串(依舊是下標來計數)
範圍:[4,9)
str6 = @"0123456789"
str9 = @"45678"
*/
NSString *str9 = [str6 substringWithRange:NSMakeRange(4, 5)];
(2)NSMutableString-------可變字符串(由於 可變字符串 是繼承於不可變字符串 全部上述方法 可變字符串依舊能用,但初始化有一種是不能定義的,下面會說)
//初始化:
NSMutableString *str1 = @"123456789";//這種代碼是錯誤的,不能這麼定義!!
NSMutableString *str1 = [[NSMutableString alloc] init];
[str1 setString:@"abc"];//給字符串str1設置值
//字符串追加
/*
方法:str1 appendString:(NSString *)]
在str1後面追加字符串
*/
[str1 appendString:@"123"];
//格式化追加
[str1 appendFormat:@"%c",'Z'];
//插入字符串
/*
方法:[str1 insertString:(NSString *) atIndex:(NSUInteger)]
意思是將 字符串NSString 插入到 字符串str1的第 NSUInteger 個位置(一樣是相對於下標)
str1 = @"0123456789";
執行後:str1 = @"012345SSSSSS6789";
*/
[str1 insertString:@"SSSSSS" atIndex:6]; //將字符串 @"SSSSSS" 插入到 字符串str1的第6個位置
//這個方法與上面同樣,只不過在 insertString: 以後用的是一個經過格式化的新建立的NSString
[str1 insertString:[NSString stringWithFormat:@"%d",-36] atIndex:6];
//刪除字符串
/*
方法:[str1 deleteCharactersInRange:(NSRange)]
NSRange是一個結構體,內有兩個成員變量
location 表明開始的位置
length 表明長度
範圍(location ,location + length](下標)
str1 = @"0123456789";
結果:str1 = @"01289";
*/
[str1 deleteCharactersInRange:NSMakeRange(3, 5)]; //將 str1 中的第4個元素開始刪除,刪除到第9(4+5)個(包括第9個)
//修改字符串(替換字符串)
/*
方法:[str1 replaceCharactersInRange:(NSRange) withString:(NSString *)]
NSRange是一個結構體,解釋看刪除字符串的解釋
將 NSString 的字符串 替換 str1中的NSRange 的字符串
str1 = @"0123456789";
結果:str1 = @"012XXXXX56789";
*/
[ str1 replaceCharactersInRange:NSMakeRange(3, 2) withString:@"XXXXX"];//將 str1 的第3個(實際位第4個,由於是下標)開始,用字符串@"XXXXX"替換 2個長度的字符串
//字符串與數據的應用
例如:
NSString *str = @"This is my OBjective-C Project!";
NSArray *arr = [str componentsSeparatedByString:@" "];//意思是用空格來分割字符串,並將值存入數組
NSString *str1 =[arr componentsJoinedByString:@" "];//意思是將數組用" "鏈接起來