可以直接複製**即可執行看看結果,方便理解
//nsstring
//oc字串不能用printf輸出
//但是遺憾的是oc沒有乙個從終端讀取資料的方式,需要使用scanf讀取c字串然後轉換成oc的字串
#pragma mark 字元初始化
//建立乙個不可變字串str1 值是常量字串
//列印字串用%@來列印
//%@還可以列印物件
nsstring * str1 = @"常量字串";
nslog(@"%@",str1);
//用字串建立字串
nsstring * str2 = [[nsstring alloc]initwithstring:str1];
nslog(@"%@",str2);
//用字串的格式化來初始化建立乙個字串
//api
nsstring * str3 = [[nsstring alloc]initwithformat:@"%@%d%f",@"abc",123,12.3];
nslog(@"%@",str3);
//用字串的類方法建立乙個格式化字串
nsstring * str4 = [nsstring stringwithformat:@"%@%d",@"def",456];
nslog(@"%@",str4);
#pragma mark 將c語言字串轉換成oc字串
//oc中只要遇到字串編碼的問題均為nsutf8stringencoding
//萬國碼unicode
nsstring * str5 = [[nsstring alloc]initwithcstring:"abc" encoding:nsutf8stringencoding];
nslog(@"%@",str5);
char * p = "abc";
nsstring * str5_1 = [[nsstring alloc]initwithutf8string:p];
nslog(@"%@",str5_1);
//類方法轉換c字串
nsstring * str5_2 = [nsstring stringwithcstring:p encoding:nsutf8stringencoding];
nsstring * str5_3 = [nsstring stringwithutf8string:p];
nslog(@"%@ %@",str5_2, str5_3);
#pragma mark 字串的比較
//判斷字串中不能是用 == 判斷
//在設計nsstring時,內部應用了一種優化的思想, 享元設計思想
//在設計字串的時候,會有乙個緩衝池,只要緩衝池中有當前字串,那麼就會返回當前字串的位址,不會再去重複建立,因為大量的建立字串會消耗記憶體,所以提過了這種方式,當我們是用stringwithformat的時候回重新建立乙個新的字串,所以不能用 == 號進行判斷
//在判斷字串中 == 判斷的是字串的指標位址是否相等,存在一定判斷錯誤的風險.
//在實際開發中不能是用== 而是使用專門判斷字串想的方法 isequaltostring
nsstring * str6 = @"ab";
nsstring * str6_1 = @"你好";
//接收返回值
//bool isok = [str6 isequaltostring:str6_1];
if([str6 isequaltostring:str6_1])elseelse if (result == nsorderedascending)else if(result == nsordereddescending) nsrange;
*///判斷當前字串是否存在?
if(range.location != nsnotfound)elseelse;
nslog(@"%@",[str12 substringwithrange:range2]);
//將原串str12指定範圍內的字元用@"努力學習"替換
nsstring * str12_3 = [str12 stringbyreplacingcharactersinrange: nsmakerange(0, 9) withstring:@"努力學習"];
nslog(@"str12_3 = %@",str12_3);
#pragma mark 判斷字首和字尾
nsstring * str13 = @"";
//檢查某個字串是否已指定的字串開始(字首)
#pragma mark 從指定檔案讀取字串
//將檔案的內容讀入到字串中
//第乙個引數是檔案的路徑
//第二個字元編碼
//第三個錯誤資訊
nsstring * str16 = [nsstring stringwithcontentsoffile:@"/users/hhh/desktop/github.txt" encoding:nsutf8stringencoding error:nil];
nslog(@"str16 = %@",str16);
//從網上讀取檔案內容到字串中
//第乙個 **
//第二個 字元編碼
//第三個 錯誤資訊
nsstring * str17 = [nsstring stringwithcontentsofurl:[nsurl urlwithstring:@""]encoding:nsutf8stringencoding error:nil];
nslog(@"str17 = %@",str17);
//寫入檔案
//第乙個是目標檔案路徑
//第二個是否寫入快取(原子)
//第三個編碼
//第四個錯誤資訊
//如果沒有檔案,那麼就會建立出乙個新的檔案,如果原檔案已經存在,那麼會覆蓋原檔案
[str12 writetofile:@"/users/hhh/desktop/aa.txt" atomically:yes encoding:nsutf8stringencoding error:nil];
字串 可變字串與不可變字串
一 nsstring 是不可變字串,所有它所有產生其他字串方法都是生成乙個新的字串,而不會改變原來字串 第一種 字面量 它是常量字串,儲存常量區 nsstring str abc 第二種是通過 快捷的構造方法 nsstring stringwithformat 第三種方式 初始化方法 nsstrin...
C 字串是不可變的
string型別的關鍵特徵是在於它是不可變的 immutable 可以為string變數賦乙個全新的值,但出於效能方面考慮,沒有提供修改字串內容的機制。所以不可能將字串中的字幕全部轉換為大寫。只能新建字串,讓它成為舊字串的大寫字母版本,但舊字串在這個過程中不會被修改。1 錯誤,string是不可改變...
字串的不可變性
字串的不可變性,從字面的意思上理解,這個 不可變 視乎是不成立的。通過賦值操作我們發現我們可以更改字串變數的值,這種改變並不能推翻 字串不可變性 中的不可變。也就是說字串變化並不指的是賦值這種變化。通過字串型別和值型別在記憶體中的儲存方式對比看看,字串中的不可變到底指的是什麼?值型別 字串 不可變性...