length法:bool isempty = (str.length == 0);empty法:bool isempty = (str == string.empty);
general法:bool isempty = (str == "");
2、深入內部機制: 要深入**其內部機制,需要檢視.net的源**,同樣有三種方法供參考: rotor法:乙個不錯的選擇就是微軟的rotor,這是微軟的乙個源**共享專案。 mono法:另乙個不錯的選擇當然就是真正的開源專案mono啦! reflector法:最後乙個選擇就是使用反編譯器,不過這種重組的**不一定就是原貌,只不過是一種「近似值」,可以考慮使用reflector這個反編譯器[1]。
publicsealed
class string : icomparable, icloneable, iconvertible, ienumerable, icomparable...
//code here
public
static
readonly
string
empty;
public
static
bool
operator ==(string a, string
b)...
public
static
bool equals(string a, string
b)...
if ((a != null) && (b != null
))...
return
false;}
private
static
unsafe
bool equalshelper(string ao, string
bo)...
//code here
}private
extern
intinternallength();
public
intlength
...}
//code here
}
rotor裡面string類的**與此沒什麼不同,只是沒有equalshelper方法,代之以如下的宣告:
publicextern
bool equals(string value);
進一步分析: 首先是empty法,由於string.empty是乙個靜態唯讀域,只會被建立一次(在靜態建構函式中)。但當我們使用empty法進行判空時,.net還會依次展開呼叫以下的方法,而後兩個方法內部還會進行物件引用判等!
publicstatic
bool
operator ==(string a, string b);
public
static
bool equals(string a, string b);
private
static
unsafe
bool equalshelper(string ao, string bo);
若使用general法判等的話,情況就「更勝一籌」了!因為.net除了要依次展開呼叫上面三個方法之外,還得首先建立乙個臨時的空字串例項,不適合進行大量的比較。
而對於length法,則可以繞過上面這些繁瑣的步驟,直接進行整數(字串長度)判等。 大多數情況下,整數判等都要來得快(我實在想不出比它更快的了,在32位系統上,system.int32運算最快了)! 另外,在equalshelper方法裡面.net會先使用length法來進行判等! 可惜無法獲得internallength方法的**。 在mono的源**裡面看到了更簡明的實現:
classstring
...}//.
}
然而使用length法進行字串判空串時,要注意,必須先判斷該字串例項是否為空引用,否則將會丟擲nullreferenceexception異常! 以下是改進後的length法:
void foo(stringbar)
...
複製**
3、總結: 使用length法來進行字串判空串是有著很大的效能優勢的,尤其在進行大量字串判空時! 當然首先得判斷字串例項是否為空引用!
77 常用字串格式化哪幾種?
1.一一對應 msg 我叫 s,我喜歡 s,討厭 s 大壯 游泳 落後 裡是具體內容 print msg name 小黑 hobbie 游泳 dishobby 落後 msg 我叫 s,我喜歡 s,討厭 s name,hobbie,dishobby 裡是變數名,注 變數要先宣告才能引用 print m...
分割字串的幾種方法
單個字元分割 string s abcdeabcdeabcde string sarray s.split c foreach string i in sarray console.writeline i.tostring 輸出下面的結果 ab deab deab de多個字元分割 string s...
字串逆序的幾種方法
char reverse char s 原地逆序 英文叫做in place reverse。這是最常考的,原地逆序意味著不允額外分配空間,主要有以下幾種方法,思想都差不多,就是將字串兩邊的字元逐個交換,如下圖。給定字串 abcdef 逆序的過程分別是交換字元a和f,交換字元b和e,交換字元c和d。一...