新聞中心
工具類亂象
最近在檢查代碼時,發(fā)現(xiàn)有的同事喜歡用 isEmpty,有的同事喜歡用 isBlank,而且大家用的還不是同一個工具包中的,甚至還有自己手寫 String 工具類的,天呀,我真是醉了……

創(chuàng)新互聯(lián)是專業(yè)的朝陽縣網(wǎng)站建設公司,朝陽縣接單;提供成都網(wǎng)站設計、成都網(wǎng)站建設、外貿(mào)網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行朝陽縣網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
你們公司是否也有這樣的情況呢?別說沒有,我真不信!
說到這個事情,最近還有個工作 3 年的同事問我 isEmpty 和 isBlank 的區(qū)別,好吧,今天就展開講下。
首先,這兩個方法用的都是工具類 StringUtils 里面的方法,都是用來判斷字符串是否為空的,而這個工具類到處都是,如下圖所示,棧長輸入 StringUtil,很多類似的工具類就蹦出來了:
??
像這樣類似的 String 工具類存在不同的包中,有 Netty, Apache commons-lang3, Spring 等等,這也是造成程序員不統(tǒng)一工具類的原因,雖然大部分框架都會自己集成,但用的最多的,方法最全的還要屬 Apache commons-lang3 工具包。
commons-lang3 是 Apache 下面的一個開源的通用 Java 工具包,除了常用的字符串工具類,還包含數(shù)字工具類、時間工具類、反射工具類、線程工具類,等等……
更多請參考《排名前 16 的 Java 工具類》這篇文章。
為什么推薦通用的 commons-lang3?
一方面,commons-lang3 是專業(yè)的工具包,功能非常齊全、強大。
另一方面,不一定所有的項目都會用到 Netty、Spring 等框架,它們都是框架集成的,只有一小部分功能,方法并不齊全,所以通用的 commons-lang3 工具包對系統(tǒng)遷移、或者對全公司不同系統(tǒng)之間的共用有幫助,避免差異化引起的系統(tǒng)潛在 bug。
isEmpty 和 isBlank 區(qū)別?
說了這么多,isEmpty 和 isBlank 到底有啥區(qū)別?
1)isEmpty
判斷字符串是否為空字符串,只要有一個任意字符(包括空白字符)就不為空。
來看 isEmpty 的方法源碼:
public static boolean isEmpty(CharSequence cs) {
return cs == null || cs.length() == 0;
}看見沒,這個方法只判斷了是為為 null 或者長度為 0。
意味著,如果用戶輸入 " " 等空白字符,這個方法就不通過了,結(jié)果就是不為空了。
如驗證輸入以下內(nèi)容:
|
輸入內(nèi)容 |
是否為空 |
|
" " |
否 |
|
"" |
是 |
|
"Java技術(shù)棧" |
否 |
2、isBlank
判斷字符串是否為空字符串,全部空白字符也為空。
來看 isBlank 的方法源碼:
public static boolean isBlank(CharSequence cs) {
int strLen = length(cs);
if (strLen == 0) {
return true;
} else {
for(int i = 0; i < strLen; ++i) {
if (!Character.isWhitespace(cs.charAt(i))) {
return false;
}
}
return true;
}
}看見沒,第 7 行,只要有一個字符不為空白字符就返回 false,也就是說,如果全部都為空白字符就返回 true,也就是全部空白字符也為空。
如驗證輸入以下內(nèi)容:
|
輸入內(nèi)容 |
是否為空 |
|
" " |
是 |
|
"" |
是 |
|
"Java技術(shù)棧" |
否 |
這時候,如果用戶輸入 " " 等空白字符,這個方法也返回空了,這也是大部分業(yè)務場景下我們期望出現(xiàn)的結(jié)果。
isEmpty 和 isBlank 怎么選?
很明顯,我們要判斷一個字符串為空,絕大部分情況下 "空白字符" 也要為空的,嚴謹來說肯定要用 isBlank,雖然 isEmpty 也可以,但如果在最前端的接口不被攔截掉,請求到了后端的服務、數(shù)據(jù)庫,就可能會造成壓力,甚至是系統(tǒng)異常,這是完全可以避免的。
但萬事也沒有絕對,如果你的程序可以接受任意字符,包括 "空白字符",那就要選擇 isEmpty,isBlank 會攔截所有空白字符,就達不到要求。
所以,這兩個工具方法你會用了嗎?
與之相對應的一般還有 isNotEmpty 和 isNotBlank,這都是對工具類的封裝。
好了,今天的分享就到這了。
當前名稱:工作3年的同事不懂isEmpty和isBlank的區(qū)別,我真是醉了。。
鏈接分享:http://m.5511xx.com/article/dhchepe.html


咨詢
建站咨詢
