C 判斷字串為空有哪幾種方法

2021-09-08 04:22:09 字數 2173 閱讀 5460

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]。

public

sealed

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方法,代之以如下的宣告:

public

extern

bool equals(string value);

進一步分析: 首先是empty法,由於string.empty是乙個靜態唯讀域,只會被建立一次(在靜態建構函式中)。但當我們使用empty法進行判空時,.net還會依次展開呼叫以下的方法,而後兩個方法內部還會進行物件引用判等!

public

static

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的源**裡面看到了更簡明的實現:

class

string

...}//.

}

然而使用length法進行字串判空串時,要注意,必須先判斷該字串例項是否為空引用,否則將會丟擲nullreferenceexception異常! 以下是改進後的length法:

void foo(string

bar)

...

複製**

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。一...