iOS概念入門學習-Foundation框架-NSString

概要:本文主要介紹了NSString的常用用法,在C語言中,我們使用的是char *來存儲字符串,而OC爲我們提供了更加強大的NSString類型,讓我們可以更靈活便捷的進行各類字符串操作

一、NSString介紹

1.概念

一個NSString對象就代表一個字符串(文字內容) 
一般稱NSString爲字符串類 

2.NSString的創建方式

(1)直接創建

NSString *str = @"abc";
NSString *st3 = @"abc";

這種寫法,字符串存儲在內存的常量區

(2)格式化創建

這裏寫圖片描述
注意這兩種寫法所佔用的內存在不同的區域,下個知識點我們將詳細介紹。

(3)NSString的內存管理問題

首先讓我們來看幾種初始化方法所佔用不同內存空間的實例,如圖:
這裏寫圖片描述

可見,str1,str3,str5所佔用的內存空間是一樣的,它們在常量區,str2,str4所佔用內存空間是不同的,它們在堆區。
速記方法:直接用@”“和…WithString創建的在常量區,用…WithFormat創建的在堆區。

二、NSString常見用法

1.長度計算

這裏寫圖片描述

由實例可見,無論中文英文,在OC中都佔一個字節,而C語言中中文佔3個字節

2.比較字符串大小

使用compare比較字符串大小,實例如下:
這裏寫圖片描述
compare的返回結果有三種情況:
NSOrderedAscending:升序 結果是一個極大數
NSOrderedSame:相同 結果是0
NSOrderedDescending:降序 結果是1

如果要忽略大小寫的話,可以在options 裏面加一個參數
NSCaseInsensitiveSearch;
具體如下:
NSComparisonResult result2 =[str1 compare:str2 options:NSCaseInsensitiveSearch];

常見的參數有3個
NSCaseInsensitiveSearch:不區分大小寫字符。
NSLiteralSearch:進行完全比較,區分大小寫。(默認)
NSNumericSearch:比較字符串的字符個數,而不是字符值。

3.判斷字符串是否相等

在C語言中,我們可以利用“==”進行判斷,但是在OC中由於相同的字符串存儲的內存空間可能不同,所以即使是相同的字符串如果用“==”進行比較的話也可能會出現錯誤的結果。如:
這裏寫圖片描述
因此,在OC中我們要採取另一種方式比較字符串是否相等。
-(BOOL) isEqualToString: (NSString *) aString;
該方法比較接收方和當作參數傳遞來的字符串 返回BOOL(YES或NO)型數據,表示兩個字符串的內容是否相同,注意區分大小寫

4.NSString前後綴檢查

(1)判斷字符串前綴

-(BOOL) hasPrefix: (NSString *) aString; 

此方法常用來檢測網址前綴

(2)判斷字符串後綴

-(BOOL) hasSuffix: (NSString *) aString; 

此方法常用來檢測文件名後綴

以上兩方法返回值是一個bool值,匹配成功則返回1,失敗則返回0

5.字符串查找

-(NSRange)rangeOfString:(NSString *)aString;

此方法用來檢查字符串內容中是否包含了aString如果包含, 就返回aString在字符串中第一次出現的範圍 ,返回結果是NSRange類型的。如果不包含, NSRange的location爲NSNotFound, length爲0
這裏寫圖片描述

6.字符串的截取和替換

(1)字符串的截取

- (NSString *)substringFromIndex:(NSUInteger)from; 
從指定位置from開始(包括指定位置的字符)到尾部 

- (NSString *)substringToIndex:(NSUInteger)to; 
從字符串的開頭一直截取到指定的位置to,但不包括該位置的字符 

- (NSString *)substringWithRange:(NSRange)range; 
按照所給出的NSRange從字符串中截取子串 

這裏寫圖片描述

實例:將標籤內的字符截取出來並打印
這裏寫圖片描述

(2)字符串的替換

這裏寫圖片描述

7.其他

NSString的函數還有很多,還有一些只做簡單介紹

(1)獲取制定位置的字符

-(unichar)characterAtIndex:(NSUInteger)index;

(2)字符串和其他數據類型的轉換

-(double)doubleValue;
-(float)floatValue;
-(int)intValue;

OC->C :
- (char *)UTF8String;
C->OC :
NSString *strr = [NSString stringWithUTF8String:"abc"];

(3)文件寫入與讀取

1)寫入
str writeToFile:@"文件的路徑" atomically:原子性(YES/NO)encoding:NSUTF8StringEncoding error:nil
2)讀取
NSString *str = [NSString stringWithContentsOfFile:@"待讀取的文件的路徑" encoding:NSUTF8StringEncoding(編碼) error:&err(有沒有錯誤)]

三、NSMutableString

1.基本概念

NSMutableString 類繼承NSString類,那麼NSString 提供的方法在NSMutableString中基本都可以使用。
NSMutableString好比一個字符串鏈表,它可以任意的動態在字符串中添加字符串刪除字符串指定位置插入字符串,使用它來操作字符串會更加靈活。

2.NSMutableString和NSString的區別:

(1)NSString是不可變的, 裏面的文字內容是不能進行修改的
(2)NSMutableString是可變的, 裏面的文字內容可以隨時更改
(3)NSMutableString能使用NSString的所有方法(繼承關係)

3.理解字符串的可變和不可變

不可變:指的是字符串在內存中佔用的存儲空間固定,並且存儲的內容不能發生變化 
可變:指的是字符串在內存中佔用的存儲空間可以不固定,並且存儲的內容可以被修改 

假設我定義了一個字符串,然後又給這個字符串重新”賦值”,起始這個賦值的過程是指針重新指向的過程,而非把原來字符串的值覆蓋掉。
這裏寫圖片描述

4.NSMutableString的常用方法

由於NSMutableString繼承自NSString,所以NSString所具有的功能NSMutableString都是具備的,除此之外NSMutableString還有一些特有的功能:增刪改查!

(1)增

//拼接aString到最後面
-(void)appendString:(NSString *)aString;
//拼接一段格式化字符串到最後面
-(void)appendFormat:(NSString *)format, …;
//在loc這個位置中插入aString
-(void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;

(2)刪

//刪除一個範圍內的字符串
-(void)deleteCharactersInRange:(NSRange)range;

(3)改

-(void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
使用aString替換range範圍內的字符串,一般不是以string開頭的一般都不會產生一個新的字符串。replaceOccurrencesOfString方法不需要傳範圍參數。

(4)查

查詢函數在NSString部分中已經介紹過,不再贅述。

5.字符串使用注意事項

特別注意:在使用NSMutableString時,如果用@”abc”方式創建的字符串始終是NSString,而不是NSMutableString,更無法對字符串進行可變字符串的特殊操作

總結:作爲OC中最常用的類型之一,NSString的用法必須要牢牢掌握,與C語言中的 char * 相比,NSString提供更多地方法,功能更加強大,還有NSMutableString作爲NSString的擴充,給我們提供了更多地便利和可能性!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章