- 之前寫過介紹java-lang包中類的文章,具體請參考Java面試問題總結——介紹下java.lang包下的常用類和方法。在實際項目工程應用中,我們還經常用到了第三方開源組件common-lang包,它提供了我們常用的一些編程需要,但是JDK沒能提供的機能,最大化的減少重複代碼的編寫。
- 有次面試一家小公司面試官問我是否用過common-lang包中的StringUtils類,恰好我平時有整理常用工具類的習慣,因此心中還竊喜應該答得上來,但面試官繼續問是否知道這個方法的 isEmpty 和 isBlank 方法,其實這個問題在很多工具類或框架中有涉及,spring參數校驗有@NotBlank和@NotEmpty兩個註解,但是面試過程自己還是沒有將這兩個方法的區別說清楚,現在整理下該工具包常用的類,以後開發應該也會經常使用。
1.StringUtils工具類
StringUtils工具類是我們開發使用的最多的工具類,我們經常會使用它完成一些字符串的處理。
isBlank和isEmpty方法一般用於判斷字符串類型是否空,空指null或長度length爲0,但isBlank方法可以處理空格或tab空格的字符串,即判斷前使用了trim去空格處理,isNotBlank和isNotEmpty的判斷結果則相反。
//語義化判斷
StringUtils.isBlank("");//true
StringUtils.isEmpty("");//true
StringUtils.isBlank(" ");//空格字符串,true
StringUtils.isEmpty(" ");//空格字符串,false
StringUtils.isBlank(" ");//tab空格字符串,true
StringUtils.isEmpty(" ");//tab空格字符串,false
StringUtils.isBlank(null);//true
StringUtils.isEmpty(null);//true
StringUtils.isNotBlank("");//false
StringUtils.isNotEmpty("");//false
有的時候需要打印日誌分隔符等效果,可以採用repeat方法。
//日誌打印
//實現 =========== 的效果
StringUtils.repeat("=", 50);//50指 = 的重複次數
//實現 %%%%%%%%Customised Header%%%%%%%% 的效果
String msg = StringUtils.center(" Customised Header ", 50, "%");//50指代整個輸出字符串長度
字符串數組的轉化一般需要複雜的代碼實現,採用join和spilt方法實現可以簡單搞定。
//String與數組轉化
//將一個array中的String連接起來,用分隔符隔開
String[] array = {"1", "2", "3", "4", "5"};
String string = StringUtils.join(array, ",");//得到 1,2,3,4,5 的字符串
//相反,把用分隔符隔開的string轉爲數組
String[] strings = StringUtils.split(string, ",");//得到 [1,2,3,4,5] 的字符串數組
字符串變量一般在操作前需要判空處理,可以採用 defaultString 方法一步搞定,另外還有其他不同需求的方法給出。
//加強代碼可讀性,減少if判斷,如果str爲null則返回默認值
StringUtils.defaultString(str, defaultValue);
//如果str爲nulll則返回""
StringUtils.defaultString(str);
//如果str爲nulll或長度爲0則返回""
StringUtils.defaultIfEmpty(str, defaultValue);
字符串的去空格處理可以採用trim方法,在其他類中也有類似方法。
//去掉字符串的空格
StringUtils.trim(null); // 返回null
StringUtils.trim("");// 空格字符串返回 ""
StringUtils.trim(" ");// tab空格返回""
字符串之間相等無視大小寫的判斷可以採用 equalsIgnoreCase 方法。
//判斷字符串是否相等
StringUtils.equals("abc","abc");//如果都爲null也返回true
StringUtils.equalsIgnoreCase("abc","ABC");//不區分大小寫比較是否相等
查找某個字符在字符串的位置可以採用 indexOf 方法,基於不同需求也可以採用其他方法。
//返回字符 1 在字符串 123456789 中第一次出現的位置。
StringUtils.indexOf("123456789",'1');
//返回從位置6後字符 1 在字符串 123456789 中第一次出現的位置
StringUtils.indexOf("123456789",'1', 6);
//返回字符 1 在字符串 123456789 中最後一次出現的位置
StringUtils.lastIndexOf("123451789",'1');
//返回從位置6後字符 1 在字符串 123456789 中第一次出現的位置
StringUtils.lastIndexOf("123451789",'1', 4);
判斷某個字符是否存在於字符串中或以開頭結尾的形式存在於字符串中,可以使用下列方法。
//判斷字符串 abc 中是否包含字符串 a
StringUtils.contains("abc", "a");
//判斷字符串 abc 中是否以字符串 a 開頭
StringUtils.startsWith("abc","a");
//判斷字符串 abc 中是否以字符串 c 結尾
StringUtils.endsWith("abc","c");
//反轉字符串 12345
StringUtils.reverse("12345");
比較兩個字符串之間的差異可以採用different方法。
//返回字符串 123 和 2 有差異的開始位置,如果沒有差異返回-1
StringUtils.difference("123","2")
去掉字符串中的特定字符或開頭結尾字符可以採用 remove 方法。
//去掉字符串 abc 中的所有字符串 a
StringUtils.remove("abc","a");
//去掉字符串 abc 中的第一個字符串 a
StringUtils.removeEnd("abc","a")
//去掉字符串 abc 中的最後一個字符串 a
StringUtils.removeStart("abc","a");
2.DateUtils工具類
DateUtils工具類一般用於日期時間的處理。
日期的判斷一般採用 isSame 方法。
//判斷兩個時間是否是同一天
DateUtils.isSameDay(new Date(),new Date());
//判斷兩個時間是否爲同一毫秒
DateUtils.isSameInstant(new Date(), new Date());
日期之間的轉化可以採用下列方法。
在這裏插入代碼片