很多人覺得判斷字串是否為空只要:
if(str==""){...
}
就可以!
你也許會想判斷字串是否為空當然是這樣,這麼一個小東西還有其他方法嗎?哈哈!
殊不知判斷字串是否為空還很多方法和很多要注意的地方,小小的優化可以使程式的執行效率和程式設計師的開發效率得到提升。
工具/原料
懂得JAVA程式設計
初級:表示式優化
大家知道計算機中判斷數值比判斷字串的執行速度快得多,所以可以把判斷字串變數內容是否為“”改為判斷字串的長度是否為0。
if(str.length()==0){...}
這樣有出現一個安全問題!!
length()屬於str物件的方法,如果str物件為空時再執行length()會丟擲空指標異常。
所以先要判斷str物件是否為空:
if(str!=null && str.length()==0){
}
很多程式設計師喜歡寫成這樣
if(str!=null && str.length()!=0){
//字串不等於空時執行
}
因為把不為空時的執行程式碼放在前面是我們的習慣,但是這樣會降低執行效率。
str!=null等價於!(str==null)
這就意味要先str==null然後把判斷結果真轉為假,假轉為真。這樣多出一步,執行效率變慢。所以建議寫成上邊的樣子。
晉級:把判斷字串是否為空封裝起來
問題:為什麼把判斷字串是否為空封裝起來?畢竟只有一行程式碼有必要嗎?
如果這個表示式非常複雜,有多個子表示式組成,比如:
(str1!=null && str1.length()==0)&&(str!=null && str.length()==0)&&...
這種情況下是不是用方法代替子表示式更容易理解
再者很多表示式可能在一個專案裡可能出現許多許多次,例如:
str!=null && str.length()!=0
我們不能保證這個專案裡所有程式設計師都能像我們這樣把一個表示式做的如此完美無缺
新建一個strUtril類,把判斷字串是否為空放到這個類的isStrExist方法裡:
/** * 已測試
* 字串工具類
* @author quchangwen
* @create 2016 - 08 - 22 22:00
*/
public class StrUtil {
/**
* 判斷字串是否有值
* @param str
* @return
*/
public static boolean isStrExist(String str){
if(str==null str.length()==0){
return false;
}
return true;
}
}
預告:以多型代替判斷
在《重構》裡有個以多型代替重複型判斷的方法與今天的方法很相似。我在下篇經驗中會介紹此方法,到時在這一篇這一欄附上鍊接。
敬請期待!