iOS不可變字串的所有操作

2021-09-08 19:26:51 字數 3075 閱讀 1574

可以直接複製**即可執行看看結果,方便理解

//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是不可改變...

字串的不可變性

字串的不可變性,從字面的意思上理解,這個 不可變 視乎是不成立的。通過賦值操作我們發現我們可以更改字串變數的值,這種改變並不能推翻 字串不可變性 中的不可變。也就是說字串變化並不指的是賦值這種變化。通過字串型別和值型別在記憶體中的儲存方式對比看看,字串中的不可變到底指的是什麼?值型別 字串 不可變性...