StringUtils.isEmpty和StingUtils.isBlank

最近作了公司的一個「批量導入訂單」的功能,裏面用到了poi,由於咱們這邊是處理Excel。裏面有複雜的驗證規則。可是,當產品測試個人功能的時候我發現一個奇怪的問題。明明excel中沒有數據,可是驗證不經過,提示xxx input String is  "",因而他將excel的單元格選中,刪除。再提交,經過驗證。他說這個狀況之前也出現過。我當時很納悶,如今想一想本身寫的驗證規則,明白了。原來我用了StringUtils.isEmpty()方法驗證了傳入的字符串。下面是StringUtils.isEmpty和StingUtils.isBlank的用法。看完以後你們應該明白,爲何會有這個問題了。就是這樣一個細節,致使引入這樣的bug,但願你們之後在使用一個方法的時候細心一點,先搞清楚他的用法再去使用。避免引入bug。測試


1. public static boolean isEmpty(String str)
判斷某字符串是否爲空,爲空的標準是str==null或str.length()==0
下面是StringUtils判斷是否爲空的示例:
StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false //注意在StringUtils中空格做非空處理
StringUtils.isEmpty(" ") = false
StringUtils.isEmpty("bob") = false
StringUtils.isEmpty(" bob ") = false

2. public static boolean isNotEmpty(String str)
判斷某字符串是否非空,等於!isEmpty(String str)
下面是示例:
StringUtils.isNotEmpty(null) = false
StringUtils.isNotEmpty("") = false
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty(" ") = true
StringUtils.isNotEmpty("bob") = true
StringUtils.isNotEmpty(" bob ") = true

3. public static boolean isBlank(String str)
判斷某字符串是否爲空或長度爲0或由空白符(whitespace)構成
下面是示例:
StringUtils.isBlank(null) = true
StringUtils.isBlank("") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank(" ") = true
StringUtils.isBlank("\t \n \f \r") = true //對於製表符、換行符、換頁符和回車符StringUtils.isBlank()均識爲空白符
StringUtils.isBlank("\b") = false //"\b"爲單詞邊界符
StringUtils.isBlank("bob") = false
StringUtils.isBlank(" bob ") = false

4. public static boolean isNotBlank(String str)
判斷某字符串是否不爲空且長度不爲0且不禁空白符(whitespace)構成,等於!isBlank(String str)
下面是示例:
StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank("\t \n \f \r") = false
StringUtils.isNotBlank("\b") = true
StringUtils.isNotBlank("bob") = true
StringUtils.isNotBlank(" bob ") = true