org.apache.commons.lang.StringUtils介紹

apache commons StringUtils介紹 

org.apache.commons.lang.StringUtils  


StringUtils是apache commons lang庫( http://commons.apache.org/lang )旗下的一個工具類,提供了不少有用的處理字符串的方法,本文不打算把全部的方法都介紹一遍,我會介紹一些精選的經常使用的給你們。 


目前StringUtils有兩個版本可用,分別是較新的org.apache.commons.lang3.StringUtils和較老的org.apache.commons.lang.StringUtils,他們有比較 大的區別,前者須要JAVA 5,我想這個應該是咱們但願使用的。 


1)public static boolean equals(CharSequence str1,CharSequence str2)  

咱們就先從最簡單的方法equals開始,和你想的同樣,他須要兩個字符串參數,當相同的時候返回true,不然返回false。 

可是java.lang.String已經有現成的比較完美的equals方法了,爲什麼咱們還須要一個第三方的實現呢? 

這個問題很好,讓咱們來看看下面這些代碼,看看有何問題? 
public void doStuffWithString(String stringParam) {   
if(stringParam.equals("MyStringValue")) {   
// do stuff }   
}



這個可能有NullPointerException出現,那麼有幾個辦法處理: 

public void safeDoStuffWithString1(String stringParam) {   
if(stringParam != null &&   
stringParam.equals("MyStringValue")) {   
// do stuff   
}   
}    
public void safeDoStuffWithString2(String stringParm) {   
if("MyStringValue".equals(stringParam))   
{   
// do stuff   
}   
}



我本人不喜歡上面的兩個方法,第一個看起來太臃腫,第二個看起來像錯誤的。這裏咱們就能夠用一些StringUtils類了,這個類提供的equals方法是空指針安全的,不用擔憂傳遞給他的是什麼參數,他不會拋出空指針異常,這樣寫:  java

public void safeDoStuffWithString3(String stringParam) {  
if(StringUtils.equals(stringParam,"MyStringValue))   
{   
// do stuff   
}   
}




這個是我我的的喜愛,可是這個確實看起來比較簡單易讀。前面的兩個方法雖然麼有什麼問題,可是我想StringUtils.equals仍是值得考慮的。 

2)isEmpty,isNotEmpty,isBlank,isNotBlank  

和前面同樣,這些方法相對於jdk提供的isEmpty方法來講,多了一個「空指針安全」,即不用考慮傳遞參數的空值問題,讓咱們來看一個例子: 
if(myString != null && !myString.isEmpty()) {   
// 有點臃腫是把?  
// Do stuff with myString   
}   
   
if(StringUtils.isNotEmpty(myString)) { // 好多了吧   
// Do stuff with myString   
}



Blank和empty的區別  

isBlank將在字符串含有空白字符的時候,返回true,例如: 
String someWhiteSpace = " \t \n";   
StringUtils.isEmpty(someWhiteSpace); // false   
StringUtils.isBlank(someWhiteSpace); // true
  



3)public static String[] split(String str,String separatorChars)  

固然,這個方法相對於String.split也是空指針安全的,當你嘗試split一個null字符串的時候,將返回Null,一個Null的分隔符將按照空白字符分隔字符串,可是,還有一個理由讓你可考慮使用StringUtils.split()方法,就是jdk自帶的String.split因爲支持正則表達式進行分隔,因此可能帶來意想不到的後果,例如:  正則表達式

public void possiblyNotWhatYouWant() {  
String contrivedExampleString = "one.two.three.four";   
String[] result = contrivedExampleString.split(".");   
System.out.println(result.length); // 0   
}
 
上面很明顯你但願按照.分隔,可是jdk理解的「.」是正則表達式的任意字符,致使字符串內任意字符都匹配,返回一個size=0的字符串數組。其實你只要傳遞"\\."就好了,可是這個確實是一個問題。  
這樣,使用StringUtils.split就簡單多了,另外,我測試還發現StringUtils.split比jdk自帶的split要快四倍。 

4)public static String join(Iterable iterable,String separator)  
這個方法確實很實用,由於jdk自身沒有提供,簡單使用方法: 
String[] numbers = {"one", "two", "three"};  
StringUtils.join(numbers,","); // returns "one,two,three"
 
  


固然你能夠傳遞一個數字或者迭代序列iterators. 
相關文章
相關標籤/搜索