2015年4月7日 星期二

【筆記】使用Commons lang中的StringUtils來處理字串

Apache Commons是一個專注於提供可重覆利用的Java元件,其中,好幾個元件在拜歐在工作中開始用Java開發專案,就常用到。

其中 Commons Lang這一元件中,針對了字串、數值,還有物件建立與序列化等等,提供了更多的方法,以補足標準java.lang API的不足之處。

好像不管使用什麼語言,在程式要處理字串的地方,是常常看到的,在 JavaString類別本身就提供了很多來處理字串的方法,但在使用這些方法時,也常都要先判斷String物件是否為null再做呼叫,有時會程式失去的易讀性,如要判斷一個String物件是否為空白字串(""),一般會這樣寫:
if(input != null && input.equals(""))
        
//OR
if("".equals(input))
但若使用StringUtils類別的話,可以呼叫isEmpty這個方法來判斷:
if(StringUtils.isEmpty(input))
//StringUtils.isEmpty(null) 回傳true
//StringUtils.isEmpty("")   回傳true
//StringUtils.isEmpty(" ")  回傳false
這樣不只省了一些程式碼,而且也大大地提升了程式的易讀性。

StringUtils類別中實作了很多方便用來處理字串的方法,這裡再介紹一個拜歐覺得用過來切分字串是非常方便的方法:splitByWholeSeparatorPreserveAllTokens,詳細的文件,可以參考這裡

1,2,,4,5,,若用,去切,在有些情況下,會希望結果是1、2、空白、4、5和空白,先用String的內建的split方法去切:
String input = "1,2,,4,5,";
String[] peices = input.split(",");
System.out.println("字串陣列的長度為: " + peices.length);
System.out.print("字串陣列內的元素為: ");
System.out.print(Arrays.asList(peices));
結果為
字串陣列的長度為: 5
字串陣列內的元素為: [1, 2, , 4, 5]
從上面來看,最後一個空白不見了,這不符合原先預期的結果。這時若使用splitByWholeSeparatorPreserveAllTokens這個方法去切:
String input = "1,2,,4,5,";
String[] peices = StringUtils.splitByWholeSeparatorPreserveAllTokens(input, ",");
System.out.println("字串陣列的長度為: " + peices.length);
System.out.print("字串陣列內的元素為: ");
System.out.print(Arrays.asList(peices));
結果就會如希望地呈現:
字串陣列的長度為: 6
字串陣列內的元素為: [1, 2, , 4, 5, ]
若對其實作有興趣,建議可以下載它的原始檔來瞧瞧。

在使用Commons Lang元件時,有一個小地方要注意的是,它到版本 3.0以後,在套件名稱上有點差異,在3.0以前,套件名稱為org.apache.commons.lang,而之後的套件名稱為org.apache.commons.lang3,這有時是為什麼明明有把函式庫引入,但卻編譯錯誤的原因!

沒有留言: