apache commons常用工具類(轉)

1.有些情況下,Arrays滿足不到你對數組的操作?不要緊,ArrayUtils幫你 
      ArrayUtils

public class TestMain {

 public static void main(String[] args) {
  int[] nums1 = { 1, 2, 3, 4, 5, 6 };
  // 通過常量創建新數組
  int[] nums2 = ArrayUtils.EMPTY_INT_ARRAY;

  // 比較兩個數組是否相等
  ArrayUtils.isEquals(nums1, nums2);

  // 輸出數組,第二參數爲數組爲空時代替輸出
  ArrayUtils.toString(nums1, "array is null");

  // 克隆新數組,注意此拷貝爲深拷貝
  int[] nums3 = ArrayUtils.clone(nums1);

  // 截取數組
  ArrayUtils.subarray(nums1, 1, 2);

  // 判斷兩個數組長度是否相等
  ArrayUtils.isSameLength(nums1, nums2);

  // 判斷兩個數組類型是否相等,注意int和Integer比較時不相等
  ArrayUtils.isSameType(nums1, nums2);

  // 反轉數組
  ArrayUtils.reverse(nums1);

  // 查找數組元素位置
  ArrayUtils.indexOf(nums1, 5);

  // 查找數組元素最後出現位置
  ArrayUtils.lastIndexOf(nums1, 4);

  // 查找元素是否存在數組中
  ArrayUtils.contains(nums1, 2);

  // 將基本數組類型轉爲包裝類型
  Integer[] nums4 = ArrayUtils.toObject(nums1);

  // 判斷是否爲空,length=0或null都屬於
  ArrayUtils.isEmpty(nums1);

  // 並集操作,合併數組
  ArrayUtils.addAll(nums1, nums2);

  // 增加元素,在下標5中插入10,注意此處返回是新數組
  ArrayUtils.add(nums1, 5, 1111);

  // 刪除指定位置元素,注意返回新數組,刪除元素後面的元素會前移,保持數組有序
  ArrayUtils.remove(nums1, 5);

  // 刪除數組中值爲10的元素,以值計算不以下標
  ArrayUtils.removeElement(nums1, 10);
 }
}
2.還在使用傳統反射嗎?還在被反射的樣板代碼困擾?看commons如何幫助我們簡化反射的工作,從樣板代碼抽身 
ClassUtils

public class TestMain {

 public static void main(String[] args) {
  // 獲取Test類所有實現的接口
  ClassUtils.getAllInterfaces(Test.class);

  // 獲取Test類所有父類
  ClassUtils.getAllSuperclasses(Test.class);

  // 獲取Test類所在的包名
  ClassUtils.getPackageName(Test.class);

  // 獲取Test類簡單類名
  ClassUtils.getShortClassName(Test.class);

  // 判斷是否可以轉型
  ClassUtils.isAssignable(Test.class, Object.class);

  // 判斷是否有內部類
  ClassUtils.isInnerClass(Test.class);

 }
}
ConstructorUtils 
public class TestMain {

 public static void main(String[] args) {

  // 獲取參數爲String的構造函數
  ConstructorUtils.getAccessibleConstructor(Test.class, String.class);

  // 執行參數爲String的構造函數
  Test test = (Test) ConstructorUtils.invokeConstructor(Test.class,
    "Hello");
 }
}
MethodUtils

public static void main(String[] args) throws NoSuchMethodException,
   IllegalAccessException, InvocationTargetException {
  // 調用無參方法
  Test test = new Test();
  MethodUtils.invokeMethod(test, "publicHello", null);

  // 調用一參方法
  MethodUtils.invokeMethod(test, "publicHello", "Hello");

  // 調用多參方法
  MethodUtils.invokeMethod(test, "publicHello", new Object[] { "100",
    new Integer(10) });

  // 調用靜態方法
  MethodUtils.invokeStaticMethod(Test.class, "staticHello", null);
 }
FieldUtils 
public class TestMain {

 public static void main(String[] args) throws IllegalAccessException {
  Test test = new Test("1", "Ray", "hello");

  // 以下兩個方法完全一樣,都能獲取共有或私有變量,因爲第三個參數都設置了不檢查
  FieldUtils.getDeclaredField(Test.class, "username", true);
  FieldUtils.getField(Test.class, "username", true);

  // 讀取私有或公共變量的值
  FieldUtils.readField(test, "username", true);

  // 讀取靜態變量
  FieldUtils.readStaticField(Test.class, "STATIC_FIELD");

  // 寫入私有或共有變量
  FieldUtils.writeField(test, "username", "RayRay", true);

  // 寫入靜態變量
  FieldUtils.writeStaticField(Test.class, "STATIC_FIELD", "static_value");
 }
}

 

3. 很多情況下我們都需要將字符串轉換爲數字,或判斷字符串是否是數字等等操作,NumberUtils幫助我們方便的從字符串轉換爲數字,在不使用NumberUtils情況下,若然字符串值不是數字,使用Integer.parseInt()時會報出java.lang.NumberFormatException,但在NumberUtils的情況下,只會返回0而不產生錯誤

NumberUtils  and  RandomUtils 
public class TestMain {
 public static void main(String[] args) throws IllegalAccessException {
  String str = "12.7";
  /*
   * org.apache.commons.lang.NumberUtils已經被棄用,
   * 注意要引入org.apache.commons.lang.math.NumberUtils
   */

  // 判斷字符串是否爲整數
  NumberUtils.isDigits(str);

  // 判斷字符串是否爲數字
  NumberUtils.isNumber(str);

  // 獲取參數中最大的值,支持傳入數組
  NumberUtils.max(10, 20, 30);

  // 獲取參數中最小的值,支持傳入數組
  NumberUtils.min(10, 20, 30);

  // 將字符串轉換爲int類型,支持float,long,short等數值類型
  NumberUtils.toInt(str);

  // 通過字符串創建BigDecimal類型 ,支持int,float,long等數值
  NumberUtils.createBigDecimal(str);


  /*
   * RandomUtils幫助我們產生隨機數,不止是數字類型 , 
   * 連boolean類型都可以通過RandomUtils產生
   */
  RandomUtils.nextBoolean();
  RandomUtils.nextDouble();
  RandomUtils.nextLong();
  // 注意這裏傳入的參數不是隨機種子,而是在0~1000之間產生一位隨機數
  RandomUtils.nextInt(1000);

 }
}
4. 在開發當中字符串的使用和操作時最爲頻繁的,而null的字符串經常讓我們報出NullPointerException,在使用StringUtils後,將不需要爲字符串的null值而煩惱,卻又提供了更多的操作讓我們更方便的操作字符串

 StringUtils 

public class TestMain {
 public static void main(String[] args) throws IllegalAccessException {
  String str = "Hello World";
  /*
   * 由於StringUtils擁有100+的方法,筆者不逐一列舉用法,
   * 只列舉筆者認爲常用的或筆者使用過的
   */

  // isEmpty和isBlank的區別在於isEmpty不會忽略空格,
  // " "<--對於這樣的字符串isEmpty會認爲不是空,
        // 而isBlank會認爲是空,isBlank更常用
  StringUtils.isEmpty(str);
  StringUtils.isNotEmpty(str);
  StringUtils.isBlank(str);
  StringUtils.isNotBlank(str);
  // strip      --> 去除兩端的aa
  // stripStart --> 去除開始位置的hell
  // stripEnd   --> 去除結尾位置的orld
  StringUtils.strip(str, "aa");
  StringUtils.stripStart(str, "hell");
  StringUtils.stripEnd(str, "orld");


  // 返回字符串在第三次出現A的位置
  StringUtils.ordinalIndexOf(str, "A", 3);


  // 獲取str 開始爲hello結尾爲orld中間的字符串
  // 注意此方法返回字符串      -->substringBetween
  // 注意此方法返回字符串數組(多了個s) --> substringsBetween
  StringUtils.substringBetween(str, "hell", "orld");
  StringUtils.substringsBetween(str, "hell", "orld");


  // 重複字符串,第二種重載形式爲在重複中用hahah拼接
  StringUtils.repeat(str, 3);
  StringUtils.repeat(str, "hahah", 2);


  // 統計參數2在字符串中出現的次數
  StringUtils.countMatches(str, "l");


  // 判斷字符串是否全小寫或大寫
  StringUtils.isAllLowerCase(str);
  StringUtils.isAllUpperCase(str);


  // isAlpha        --> 全部由字母組成返回true
  // isNumeric      -->全部由數字組成返回true
  // isAlphanumeric -->全部由字母或數字組成返回true
  // isAlphaSpace   -->全部由字母或空格組成返回true
  // isWhitespace   -->全部由空格組成返回true
  StringUtils.isAlpha(str);
  StringUtils.isNumeric(str);
  StringUtils.isAlphanumeric(str);
  StringUtils.isAlphaSpace(str);
  StringUtils.isWhitespace(str);


  // 縮進字符串,第二參數最低爲 4,要包含...
  // 現在Hello World輸出爲H...
  StringUtils.abbreviate(str, 4);


  // 首字母大寫或小寫
  StringUtils.capitalize(str);
  StringUtils.uncapitalize(str);


  // 將字符串數組轉變爲一個字符串,通過","拼接,支持傳入iterator和collection
  StringUtils.join(new String[] { "Hello", "World" }, ",");

 

  /*
   * 經常性要把後臺的字符串傳遞到前提作爲html代碼進行解釋,
   * 可以使用以下方法進行轉換,以下方法輸出爲
   * <p>Hello</p>
   */
  StringEscapeUtils.escapeHtml("Hello
");
 }
}

5.DateUtils and DateFormatUtils 
public class TestMain {
 public static void main(String[] args) throws IllegalAccessException {
  Date day1 = new Date();
  /*
   * 由於Aache的DateUtils和DateFormatUtils並沒有Joda強大,
   *  所以在這裏只作簡單的示例
   */
  
  // 增加一天
  DateUtils.addDays(day1, 1);
  // 減少一年
  DateUtils.addYears(day1, -1);

  // 格式化時間,第三參數爲國際化,表示按美國時間顯示
  DateFormatUtils.format(day1, "yyyy-MM-dd", Locale.UK);

 }
}

讀者在使用時可能會發現,MethodUtils和ConstructUtils在org.apache.commons.lang.reflect和org.apache.commons.beanutils都存在,但FieldUtils和ClassUtils只在reflect當中存在,因爲beanutils提供了另外一種名爲PropertyUtils的對屬性存取更爲方便的工具,但PropertyUtils不能獲取傳統反射的Field對象,筆者建議MethodUtils和ConstructUtils應該傾向使用beanutils,因爲beanutils就是爲反射而存在,更專業(雖然提供的方法幾乎一樣),而使用ClassUtils和要獲取傳統的Field對象時使用reflect中的FieldUtils 
總結: 
      commons工具包很多開源組織都有提供,例如google,spring,apache都有各自的工具包,有衆多的選擇,但最終的目的只是爲了方便我們程序的開發和維護,簡化我們編寫一些常用的邏輯,提升我們開發的效率,從而達到活在開源,善用開源 

ps:

Apache Commons是一個非常有用的工具包,解決各種實際的通用問題,下面是一個簡述表,詳細信息訪問http://jakarta.apache.org/commons/index.html

BeanUtils
Commons-BeanUtils 提供對 Java 反射和自省API的包裝

Betwixt
Betwixt提供將 JavaBean 映射至 XML 文檔,以及相反映射的服務.

Chain
Chain 提供實現組織複雜的處理流程的“責任鏈模式”.

CLI
CLI 提供針對命令行參數,選項,選項組,強制選項等的簡單API.

Codec
Codec 包含一些通用的編碼解碼算法。包括一些語音編碼器, Hex, Base64, 以及URL encoder.

Collections
Commons-Collections 提供一個類包來擴展和增加標準的 Java Collection框架

Configuration
Commons-Configuration 工具對各種各式的配置和參考文件提供讀取幫助.

Daemon
一種 unix-daemon-like java 代碼的替代機制

DBCP
Commons-DBCP 提供數據庫連接池服務

DbUtils
DbUtils 是一個 JDBC helper 類庫,完成數據庫任務的簡單的資源清除代碼.

Digester
Commons-Digester 是一個 XML-Java對象的映射工具,用於解析 XML配置文件.

Discovery
Commons-Discovery 提供工具來定位資源 (包括類) ,通過使用各種模式來映射服務/引用名稱和資源名稱。.

EL
Commons-EL 提供在JSP2.0規範中定義的EL表達式的解釋器.

FileUpload
FileUpload 使得在你可以在應用和Servlet中容易的加入強大和高性能的文件上傳能力

HttpClient
Commons-HttpClient 提供了可以工作於HTTP協議客戶端的一個框架.

IO
IO 是一個 I/O 工具集

Jelly
Jelly是一個基於 XML 的腳本和處理引擎。 Jelly 借鑑了 JSP 定指標籤,Velocity, Cocoon和Xdoclet中的腳本引擎的許多優點。Jelly 可以用在命令行, Ant 或者 Servlet之中。

Jexl
Jexl是一個表達式語言,通過借鑑來自於Velocity的經驗擴展了JSTL定義的表達式語言。.

JXPath
Commons-JXPath 提供了使用Xpath語法操縱符合Java類命名規範的 JavaBeans的工具。也支持 maps, DOM 和其他對象模型。.

Lang
Commons-Lang 提供了許多許多通用的工具類集,提供了一些java.lang中類的擴展功能

Latka
Commons-Latka 是一個HTTP 功能測試包,用於自動化的QA,驗收和衰減測試.

Launcher
Launcher 組件是一個交叉平臺的Java 應用載入器。 Commons-launcher 消除了需要批處理或者Shell腳本來載入Java 類。.原始的 Java 類來自於Jakarta Tomcat 4.0 項目

Logging
Commons-Logging 是一個各種 logging API實現的包裹類.

Math
Math 是一個輕量的,自包含的數學和統計組件,解決了許多非常通用但沒有及時出現在Java標準語言中的實踐問題.

Modeler
Commons-Modeler 提供了建模兼容JMX規範的 Mbean的機制.

Net
Net 是一個網絡工具集,基於 NetComponents 代碼,包括 FTP 客戶端等等。

Pool
Commons-Pool 提供了通用對象池接口,一個用於創建模塊化對象池的工具包,以及通常的對象池實現.

Primitives
Commons-Primitives提供了一個更小,更快和更易使用的對Java基本類型的支持。當前主要是針對基本類型的 collection。.

Validator
The commons-validator提供了一個簡單的,可擴展的框架來在一個XML文件中定義校驗器 (校驗方法)和校驗規則。支持校驗規則的和錯誤消息的國際化。
--------------------- 
作者:劉元濤 
來源:CSDN 
原文:https://blog.csdn.net/u013510614/article/details/50481000 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章