日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

apache commons常用工具类

發(fā)布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apache commons常用工具类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

ArrayUtils

  • public class TestMain {

  • ?
  • ?public static void main(String[] args) {

  • ??int[] nums1 = { 1, 2, 3, 4, 5, 6 };

  • ??// 通過常量創(chuàng)建新數(shù)組

  • ??int[] nums2 = ArrayUtils.EMPTY_INT_ARRAY;

  • ?
  • ??// 比較兩個數(shù)組是否相等

  • ??ArrayUtils.isEquals(nums1, nums2);

  • ?
  • ??// 輸出數(shù)組,第二參數(shù)為數(shù)組為空時代替輸出

  • ??ArrayUtils.toString(nums1, "array is null");

  • ?
  • ??// 克隆新數(shù)組,注意此拷貝為深拷貝

  • ??int[] nums3 = ArrayUtils.clone(nums1);

  • ?
  • ??// 截取數(shù)組

  • ??ArrayUtils.subarray(nums1, 1, 2);

  • ?
  • ??// 判斷兩個數(shù)組長度是否相等

  • ??ArrayUtils.isSameLength(nums1, nums2);

  • ?
  • ??// 判斷兩個數(shù)組類型是否相等,注意int和Integer比較時不相等

  • ??ArrayUtils.isSameType(nums1, nums2);

  • ?
  • ??// 反轉(zhuǎn)數(shù)組

  • ??ArrayUtils.reverse(nums1);

  • ?
  • ??// 查找數(shù)組元素位置

  • ??ArrayUtils.indexOf(nums1, 5);

  • ?
  • ??// 查找數(shù)組元素最后出現(xiàn)位置

  • ??ArrayUtils.lastIndexOf(nums1, 4);

  • ?
  • ??// 查找元素是否存在數(shù)組中

  • ??ArrayUtils.contains(nums1, 2);

  • ?
  • ??// 將基本數(shù)組類型轉(zhuǎn)為包裝類型

  • ??Integer[] nums4 = ArrayUtils.toObject(nums1);

  • ?
  • ??// 判斷是否為空,length=0或null都屬于

  • ??ArrayUtils.isEmpty(nums1);

  • ?
  • ??// 并集操作,合并數(shù)組

  • ??ArrayUtils.addAll(nums1, nums2);

  • ?
  • ??// 增加元素,在下標(biāo)5中插入10,注意此處返回是新數(shù)組

  • ??ArrayUtils.add(nums1, 5, 1111);

  • ?
  • ??// 刪除指定位置元素,注意返回新數(shù)組,刪除元素后面的元素會前移,保持?jǐn)?shù)組有序

  • ??ArrayUtils.remove(nums1, 5);

  • ?
  • ??// 刪除數(shù)組中值為10的元素,以值計算不以下標(biāo)

  • ??ArrayUtils.removeElement(nums1, 10);

  • ?}

  • }

  • 2.還在使用傳統(tǒng)反射嗎?還在被反射的樣板代碼困擾?看commons如何幫助我們簡化反射的工作,從樣板代碼抽身?
    ClassUtils

  • public class TestMain {

  • ?
  • ?public static void main(String[] args) {

  • ??// 獲取Test類所有實(shí)現(xiàn)的接口

  • ??ClassUtils.getAllInterfaces(Test.class);

  • ?
  • ??// 獲取Test類所有父類

  • ??ClassUtils.getAllSuperclasses(Test.class);

  • ?
  • ??// 獲取Test類所在的包名

  • ??ClassUtils.getPackageName(Test.class);

  • ?
  • ??// 獲取Test類簡單類名

  • ??ClassUtils.getShortClassName(Test.class);

  • ?
  • ??// 判斷是否可以轉(zhuǎn)型

  • ??ClassUtils.isAssignable(Test.class, Object.class);

  • ?
  • ??// 判斷是否有內(nèi)部類

  • ??ClassUtils.isInnerClass(Test.class);

  • ?
  • ?}

  • }

  • ConstructorUtils?

  • public class TestMain {

  • ?
  • ?public static void main(String[] args) {

  • ?
  • ??// 獲取參數(shù)為String的構(gòu)造函數(shù)

  • ??ConstructorUtils.getAccessibleConstructor(Test.class, String.class);

  • ?
  • ??// 執(zhí)行參數(shù)為String的構(gòu)造函數(shù)

  • ??Test test = (Test) ConstructorUtils.invokeConstructor(Test.class,

  • ????"Hello");

  • ?}

  • }

  • MethodUtils

  • public static void main(String[] args) throws NoSuchMethodException,

  • ???IllegalAccessException, InvocationTargetException {

  • ??// 調(diào)用無參方法

  • ??Test test = new Test();

  • ??MethodUtils.invokeMethod(test, "publicHello", null);

  • ?
  • ??// 調(diào)用一參方法

  • ??MethodUtils.invokeMethod(test, "publicHello", "Hello");

  • ?
  • ??// 調(diào)用多參方法

  • ??MethodUtils.invokeMethod(test, "publicHello", new Object[] { "100",

  • ????new Integer(10) });

  • ?
  • ??// 調(diào)用靜態(tài)方法

  • ??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");

  • ?
  • ??// 以下兩個方法完全一樣,都能獲取共有或私有變量,因?yàn)榈谌齻€參數(shù)都設(shè)置了不檢查

  • ??FieldUtils.getDeclaredField(Test.class, "username", true);

  • ??FieldUtils.getField(Test.class, "username", true);

  • ?
  • ??// 讀取私有或公共變量的值

  • ??FieldUtils.readField(test, "username", true);

  • ?
  • ??// 讀取靜態(tài)變量

  • ??FieldUtils.readStaticField(Test.class, "STATIC_FIELD");

  • ?
  • ??// 寫入私有或共有變量

  • ??FieldUtils.writeField(test, "username", "RayRay", true);

  • ?
  • ??// 寫入靜態(tài)變量

  • ??FieldUtils.writeStaticField(Test.class, "STATIC_FIELD", "static_value");

  • ?}

  • }

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

  • public class TestMain {

  • ?public static void main(String[] args) throws IllegalAccessException {

  • ??String str = "12.7";

  • ??/*

  • ?? * org.apache.commons.lang.NumberUtils已經(jīng)被棄用,

  • ?? * 注意要引入org.apache.commons.lang.math.NumberUtils

  • ?? */

  • ?
  • ??// 判斷字符串是否為整數(shù)

  • ??NumberUtils.isDigits(str);

  • ?
  • ??// 判斷字符串是否為數(shù)字

  • ??NumberUtils.isNumber(str);

  • ?
  • ??// 獲取參數(shù)中最大的值,支持傳入數(shù)組

  • ??NumberUtils.max(10, 20, 30);

  • ?
  • ??// 獲取參數(shù)中最小的值,支持傳入數(shù)組

  • ??NumberUtils.min(10, 20, 30);

  • ?
  • ??// 將字符串轉(zhuǎn)換為int類型,支持float,long,short等數(shù)值類型

  • ??NumberUtils.toInt(str);

  • ?
  • ??// 通過字符串創(chuàng)建BigDecimal類型 ,支持int,float,long等數(shù)值

  • ??NumberUtils.createBigDecimal(str);

  • ?
  • ?
  • ??/*

  • ?? * RandomUtils幫助我們產(chǎn)生隨機(jī)數(shù),不止是數(shù)字類型 ,?

  • ?? * 連boolean類型都可以通過RandomUtils產(chǎn)生

  • ?? */

  • ??RandomUtils.nextBoolean();

  • ??RandomUtils.nextDouble();

  • ??RandomUtils.nextLong();

  • ??// 注意這里傳入的參數(shù)不是隨機(jī)種子,而是在0~1000之間產(chǎn)生一位隨機(jī)數(shù)

  • ??RandomUtils.nextInt(1000);

  • ?
  • ?}

  • }

  • 4.?在開發(fā)當(dāng)中字符串的使用和操作時最為頻繁的,而null的字符串經(jīng)常讓我們報出NullPointerException,在使用StringUtils后,將不需要為字符串的null值而煩惱,卻又提供了更多的操作讓我們更方便的操作字符串?

    StringUtils?
    ?

  • public class TestMain {

  • ?public static void main(String[] args) throws IllegalAccessException {

  • ??String str = "Hello World";

  • ??/*

  • ?? * 由于StringUtils擁有100+的方法,筆者不逐一列舉用法,

  • ?? * 只列舉筆者認(rèn)為常用的或筆者使用過的

  • ?? */

  • ?
  • ??// isEmpty和isBlank的區(qū)別在于isEmpty不會忽略空格,

  • ??// " "<--對于這樣的字符串isEmpty會認(rèn)為不是空,

  • ??????? // 而isBlank會認(rèn)為是空,isBlank更常用

  • ??StringUtils.isEmpty(str);

  • ??StringUtils.isNotEmpty(str);

  • ??StringUtils.isBlank(str);

  • ??StringUtils.isNotBlank(str);

  • ??// strip????? --> 去除兩端的aa

  • ??// stripStart --> 去除開始位置的hell

  • ??// stripEnd?? --> 去除結(jié)尾位置的orld

  • ??StringUtils.strip(str, "aa");

  • ??StringUtils.stripStart(str, "hell");

  • ??StringUtils.stripEnd(str, "orld");

  • ?
  • ?
  • ??// 返回字符串在第三次出現(xiàn)A的位置

  • ??StringUtils.ordinalIndexOf(str, "A", 3);

  • ?
  • ?
  • ??// 獲取str 開始為hello結(jié)尾為orld中間的字符串

  • ??// 注意此方法返回字符串????? -->substringBetween

  • ??// 注意此方法返回字符串?dāng)?shù)組(多了個s) --> substringsBetween

  • ??StringUtils.substringBetween(str, "hell", "orld");

  • ??StringUtils.substringsBetween(str, "hell", "orld");

  • ?
  • ?
  • ??// 重復(fù)字符串,第二種重載形式為在重復(fù)中用hahah拼接

  • ??StringUtils.repeat(str, 3);

  • ??StringUtils.repeat(str, "hahah", 2);

  • ?
  • ?
  • ??// 統(tǒng)計參數(shù)2在字符串中出現(xiàn)的次數(shù)

  • ??StringUtils.countMatches(str, "l");

  • ?
  • ?
  • ??// 判斷字符串是否全小寫或大寫

  • ??StringUtils.isAllLowerCase(str);

  • ??StringUtils.isAllUpperCase(str);

  • ?
  • ?
  • ??// isAlpha??????? --> 全部由字母組成返回true

  • ??// isNumeric????? -->全部由數(shù)字組成返回true

  • ??// isAlphanumeric -->全部由字母或數(shù)字組成返回true

  • ??// isAlphaSpace?? -->全部由字母或空格組成返回true

  • ??// isWhitespace?? -->全部由空格組成返回true

  • ??StringUtils.isAlpha(str);

  • ??StringUtils.isNumeric(str);

  • ??StringUtils.isAlphanumeric(str);

  • ??StringUtils.isAlphaSpace(str);

  • ??StringUtils.isWhitespace(str);

  • ?
  • ?
  • ??// 縮進(jìn)字符串,第二參數(shù)最低為 4,要包含...

  • ??// 現(xiàn)在Hello World輸出為H...

  • ??StringUtils.abbreviate(str, 4);

  • ?
  • ?
  • ??// 首字母大寫或小寫

  • ??StringUtils.capitalize(str);

  • ??StringUtils.uncapitalize(str);

  • ?
  • ?
  • ??// 將字符串?dāng)?shù)組轉(zhuǎn)變?yōu)橐粋€字符串,通過","拼接,支持傳入iterator和collection

  • ??StringUtils.join(new String[] { "Hello", "World" }, ",");

  • ?
  • ?
  • ?
  • ??/*

  • ?? * 經(jīng)常性要把后臺的字符串傳遞到前提作為html代碼進(jìn)行解釋,

  • ?? * 可以使用以下方法進(jìn)行轉(zhuǎn)換,以下方法輸出為

  • ?? * <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強(qiáng)大,

  • ?? *? 所以在這里只作簡單的示例

  • ?? */

  • ??

  • ??// 增加一天

  • ??DateUtils.addDays(day1, 1);

  • ??// 減少一年

  • ??DateUtils.addYears(day1, -1);

  • ?
  • ??// 格式化時間,第三參數(shù)為國際化,表示按美國時間顯示

  • ??DateFormatUtils.format(day1, "yyyy-MM-dd", Locale.UK);

  • ?
  • ?}

  • }

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

    ps:

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

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

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

    Chain
    Chain?提供實(shí)現(xiàn)組織復(fù)雜的處理流程的“責(zé)任鏈模式”.

    CLI
    CLI?提供針對命令行參數(shù),選項(xiàng),選項(xiàng)組,強(qiáng)制選項(xiàng)等的簡單API.

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

    Collections
    Commons-Collections?提供一個類包來擴(kuò)展和增加標(biāo)準(zhǔn)的?Java?Collection框架

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

    Daemon
    一種?unix-daemon-like?java?代碼的替代機(jī)制

    DBCP
    Commons-DBCP?提供數(shù)據(jù)庫連接池服務(wù)

    DbUtils
    DbUtils?是一個?JDBC?helper?類庫,完成數(shù)據(jù)庫任務(wù)的簡單的資源清除代碼.

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

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

    EL
    Commons-EL?提供在JSP2.0規(guī)范中定義的EL表達(dá)式的解釋器.

    FileUpload
    FileUpload?使得在你可以在應(yīng)用和Servlet中容易的加入強(qiáng)大和高性能的文件上傳能力

    HttpClient
    Commons-HttpClient?提供了可以工作于HTTP協(xié)議客戶端的一個框架.

    IO
    IO?是一個?I/O?工具集

    Jelly
    Jelly是一個基于?XML?的腳本和處理引擎。?Jelly?借鑒了?JSP?定指標(biāo)簽,Velocity,?Cocoon和Xdoclet中的腳本引擎的許多優(yōu)點(diǎn)。Jelly?可以用在命令行,?Ant?或者?Servlet之中。

    Jexl
    Jexl是一個表達(dá)式語言,通過借鑒來自于Velocity的經(jīng)驗(yàn)擴(kuò)展了JSTL定義的表達(dá)式語言。.

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

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

    Latka
    Commons-Latka?是一個HTTP?功能測試包,用于自動化的QA,驗(yàn)收和衰減測試.

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

    Logging
    Commons-Logging?是一個各種?logging?API實(shí)現(xiàn)的包裹類.

    Math
    Math?是一個輕量的,自包含的數(shù)學(xué)和統(tǒng)計組件,解決了許多非常通用但沒有及時出現(xiàn)在Java標(biāo)準(zhǔn)語言中的實(shí)踐問題.

    Modeler
    Commons-Modeler?提供了建模兼容JMX規(guī)范的?Mbean的機(jī)制.

    Net
    Net?是一個網(wǎng)絡(luò)工具集,基于?NetComponents?代碼,包括?FTP?客戶端等等。

    Pool
    Commons-Pool?提供了通用對象池接口,一個用于創(chuàng)建模塊化對象池的工具包,以及通常的對象池實(shí)現(xiàn).

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

    Validator
    The?commons-validator提供了一個簡單的,可擴(kuò)展的框架來在一個XML文件中定義校驗(yàn)器?(校驗(yàn)方法)和校驗(yàn)規(guī)則。支持校驗(yàn)規(guī)則的和錯誤消息的國際化。

    總結(jié)

    以上是生活随笔為你收集整理的apache commons常用工具类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。