Objective-C 中核心處理字符串的類是 NSString 與 NSMutableString ,這兩個類最大的區別就是NSString 創建賦值以后該字符串的內容與長度不能在動態的更改,除非重新給這個字符串賦值。而NSMutableString 創建賦值以后可以動態在該字符串上更改內容與長度。
1.創建經典的NSString字符串
NSString 與 char* 最大的區別就是 NSString是一個objective對象,而char* 是一個字節數組。@+ " 字符串 " 這個符號為objective-c NSString 字符串常量的標准用法,char* 創建的時候 無需添加@
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
- //經典的字符串賦值
- NSString *str0 = @"我是雨松MOMO";
-
- //字符串格式化合並分別包括
- //NSString*類型 int類型 char*類型
- NSString *str1 = [NSString stringWithFormat:@"我的名字:%@ 我的年齡:%d 我的郵箱:%s",@"雨松MOMO", 25,"xuanyusong@gmail.com"];
-
- //字符串賦值 參數中只可以寫一個字符串 和第一種很像
- NSString *str2 = [NSString stringWithString:@"我是字符串"];
-
- //字符串轉換為utf-8格式 參數為char*類型
- NSString *str3 = [NSString stringWithUTF8String:"字符串轉換utf-8格式"];
-
-
- //字符串合並
- int i = 100;
- char*c = "xuanyusong";
- NSString *temp = @"我是臨時字符串";
-
- //在字符串temp的基礎繼續添加 int i 與 char* c 組成一個新的字符串
- NSString *str4 = [temp stringByAppendingFormat:@"整型: %d 字符型 :%s",i,c];
-
- //在字符串temp的基礎繼續添加temp 並組成一個新的字符串
- NSString *str5 = [temp stringByAppendingString:temp];
-
- //字符串輸出
- NSLog(@"str0 = %@", str0);
- NSLog(@"str1 = %@", str1);
- NSLog(@"str2 = %@", str2);
- NSLog(@"str3 = %@", str3);
- NSLog(@"str4 = %@", str4);
- NSLog(@"str5 = %@", str5);
-
- }
每一個字符串其實是由若干個char字符組成,字符串的遍歷實際上就是將字符串中的每一個字符提取出來。
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
- //經典的字符串賦值
- NSString *str = @"YUSONGMOMO";
-
- //字符串的長度
- int count = [str length];
-
- NSLog(@"字符串的長度是%d",count);
-
- //遍歷字符串中的每一個字符
- for(int i =0; i < count; i++)
- {
- char c = [str characterAtIndex:i];
- NSLog(@"字符串第 %d 位為 %c",i,c);
- }
-
- }
3.字符串的比較
isEqualToString 比較字符串是否完全相等,大小寫不一樣也無法完全匹配。
hasPrefixe 匹配字符串頭
haSuffix 匹配字符串的尾巴
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
- NSString *str0 = @"雨松MOMO";
- NSString *str1 = @"雨松MOMO";
-
-
- //字符串完全相等比較
- if([str0 isEqualToString:str1])
- {
- NSLog(@"字符串完全相等");
- }
-
- //字符串以開頭比較
- if([str0 hasPrefix:@"雨松"])
- {
- NSLog(@"字符串str0以雨松開頭");
- }
-
- //字符串以結尾比較
- if([str1 hasSuffix:@"MOMO"])
- {
- NSLog(@"str1字符串以MOMO結尾");
- }
- }
4.字符串的截取與大小寫改變
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
-
- NSString *str0 = @"中文my name is xuanyusong";
-
- //截取字符串起始點到index為4之間的內容
- NSString * to = [str0 substringToIndex:4];
-
- NSLog(@"to = %@",to);
-
- //截取字符index為2 到結尾之間的內容
- NSString * from = [str0 substringFromIndex:2];
-
- NSLog(@"from = %@",from);
-
-
- //設置截取字符串的范圍
- //從第二位到第十位
- NSRange rang = NSMakeRange(2, 10);
- NSString * strRang = [str0 substringWithRange:rang];
- NSLog(@"rang = %@",strRang);
-
- //設置字符串首字母大寫
- NSLog(@"str0首字母大寫:%@",[str0 capitalizedString]);
- //設置字符串全部內容為大寫
- NSLog(@"str0大寫:%@",[str0 uppercaseString]);
- //設置字符全部內容為小寫
- NSLog(@"str0小寫:%@",[str0 lowercaseString]);
-
- }
5.搜索字符串與替換字符串
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
-
- NSString *str0 = @"中文my name is xuanyusong";
- NSString *temp = @"is";
- NSRange rang = [str0 rangeOfString:temp];
-
- NSLog(@"搜索的字符串在str0中起始點的index 為 %d", rang.location);
- NSLog(@"搜索的字符串在str0中結束點的index 為 %d", rang.location + rang.length);
-
- //將搜索中的字符串替換成為一個新的字符串
- NSString *str = [str0 stringByReplacingCharactersInRange:rang withString:@"哇咔咔卡卡咔"];
- NSLog(@"替換后字符串為%@", str);
-
-
- //將字符串中" " 全部替換成 *
- str = [str0 stringByReplacingOccurrencesOfString :@" " withString:@"@"];
- NSLog(@"替換后字符串為%@", str);
-
-
- }
拓展:使用下面這個方法整體替換字符串還可以設置替換的區域。
ons:<#(NSStringCompareOptions)#> range:<#(NSRange)#>
stringByReplacingOccurrencesOfString: (NSString *)withString: (NSString *) options: (NSStringCompareOptions) range: (NSRange)
這一篇主要介紹NSString 類的使用 下面篇詳細介紹NSMutableString類
NSMutableString 類 繼承NSString類,那么NSString 提供的方法在NSMutableString中基本都可以使用,NSMutableString好比一個字符串鏈表,它可以任意的動態在字符串中添加字符串 刪除字符串 指定位置插入字符串,使用它來操作字符串會更加靈活。
1.字符串尾部添加
使用alloc在內存中創建字符串對象后邊可以動態的操作這個字符串,修改與添加等。
appendstring 方法:向字符串尾部添加一個字符串。
appendFormat方法:向字符串尾部添加多個類型的字符串,可以添加任意數量與類型的字符串。
字符串中刪除元素
stringWithString 方法:用於創建字符串初始化賦值
rangeOfString方法:傳入字符串返回一個在該字符串中的范圍 也可以寫 NSMakeRange(0, 3) 意思是范圍在字符串0位到第3位
deleteCharactersInRange:刪除字符串 參數為Range 就是刪除的范圍。
字符串插入
stringWithString 方法:用於創建字符串初始化賦值
insertString方法:第一個參數 插入的字符串對象, 第二個參數 插入的位置。
字符串拷貝
字符串與指定類型轉換
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
- //創建字符串
- NSMutableString *str1 = [NSMutableString stringWithString: @"字符串1"];
- NSMutableString *str2;
-
- //字符串賦值
- str2 = str1;
-
- [str2 appendString: @" 和字符串2"];
-
- NSLog (@"str1 = %@", str1);
-
- NSLog (@"str2 = %@", str2);
- }
為什么給str2添加數據后 str1的數據也改變了?這就是指針的魅力所在,因為我們操作的是指針,str2 = str1 意思是兩個指針同時指向一塊內存,那么str2指向的內存內容改變以后str1當然跟着改變了。