1.有些情况下,Arrays满足不到你对数组的操作?不要紧,ArrayUtils帮你

ArrayUtils

  1. public class TestMain {

  2.  public static void main(String[] args) {

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

  4.   // 通过常量创建新数组

  5.   int[] nums2 = ArrayUtils.EMPTY_INT_ARRAY;

  6.   // 比较两个数组是否相等

  7.   ArrayUtils.isEquals(nums1, nums2);

  8.   // 输出数组,第二参数为数组为空时代替输出

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

  10.   // 克隆新数组,注意此拷贝为深拷贝

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

  12.   // 截取数组

  13.   ArrayUtils.subarray(nums1, 1, 2);

  14.   // 判断两个数组长度是否相等

  15.   ArrayUtils.isSameLength(nums1, nums2);

  16.   // 判断两个数组类型是否相等,注意int和Integer比较时不相等

  17.   ArrayUtils.isSameType(nums1, nums2);

  18.   // 反转数组

  19.   ArrayUtils.reverse(nums1);

  20.   // 查找数组元素位置

  21.   ArrayUtils.indexOf(nums1, 5);

  22.   // 查找数组元素最后出现位置

  23.   ArrayUtils.lastIndexOf(nums1, 4);

  24.   // 查找元素是否存在数组中

  25.   ArrayUtils.contains(nums1, 2);

  26.   // 将基本数组类型转为包装类型

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

  28.   // 判断是否为空,length=0或null都属于

  29.   ArrayUtils.isEmpty(nums1);

  30.   // 并集操作,合并数组

  31.   ArrayUtils.addAll(nums1, nums2);

  32.   // 增加元素,在下标5中插入10,注意此处返回是新数组

  33.   ArrayUtils.add(nums1, 5, 1111);

  34.   // 删除指定位置元素,注意返回新数组,删除元素后面的元素会前移,保持数组有序

  35.   ArrayUtils.remove(nums1, 5);

  36.   // 删除数组中值为10的元素,以值计算不以下标

  37.   ArrayUtils.removeElement(nums1, 10);

  38.  }

  39. }

2.还在使用传统反射吗?还在被反射的样板代码困扰?看commons如何帮助我们简化反射的工作,从样板代码抽身 
ClassUtils

  1. public class TestMain {

  2.  public static void main(String[] args) {

  3.   // 获取Test类所有实现的接口

  4.   ClassUtils.getAllInterfaces(Test.class);

  5.   // 获取Test类所有父类

  6.   ClassUtils.getAllSuperclasses(Test.class);

  7.   // 获取Test类所在的包名

  8.   ClassUtils.getPackageName(Test.class);

  9.   // 获取Test类简单类名

  10.   ClassUtils.getShortClassName(Test.class);

  11.   // 判断是否可以转型

  12.   ClassUtils.isAssignable(Test.class, Object.class);

  13.   // 判断是否有内部类

  14.   ClassUtils.isInnerClass(Test.class);

  15.  }

  16. }

ConstructorUtils

  1. public class TestMain {

  2.  public static void main(String[] args) {

  3.   // 获取参数为String的构造函数

  4.   ConstructorUtils.getAccessibleConstructor(Test.class, String.class);

  5.   // 执行参数为String的构造函数

  6.   Test test = (Test) ConstructorUtils.invokeConstructor(Test.class,

  7.     "Hello");

  8.  }

  9. }

MethodUtils

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

  2.    IllegalAccessException, InvocationTargetException {

  3.   // 调用无参方法

  4.   Test test = new Test();

  5.   MethodUtils.invokeMethod(test, "publicHello", null);

  6.   // 调用一参方法

  7.   MethodUtils.invokeMethod(test, "publicHello", "Hello");

  8.   // 调用多参方法

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

  10.     new Integer(10) });

  11.   // 调用静态方法

  12.   MethodUtils.invokeStaticMethod(Test.class, "staticHello", null);

  13.  }

FieldUtils

  1. public class TestMain {

  2.  public static void main(String[] args) throws IllegalAccessException {

  3.   Test test = new Test("1", "Ray", "hello");

  4.   // 以下两个方法完全一样,都能获取共有或私有变量,因为第三个参数都设置了不检查

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

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

  7.   // 读取私有或公共变量的值

  8.   FieldUtils.readField(test, "username", true);

  9.   // 读取静态变量

  10.   FieldUtils.readStaticField(Test.class, "STATIC_FIELD");

  11.   // 写入私有或共有变量

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

  13.   // 写入静态变量

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

  15.  }

  16. }

3. 很多情况下我们都需要将字符串转换为数字,或判断字符串是否是数字等等操作,NumberUtils帮助我们方便的从字符串转换为数字,在不使用NumberUtils情况下,若然字符串值不是数字,使用Integer.parseInt()时会报出java.lang.NumberFormatException,但在NumberUtils的情况下,只会返回0而不产生错误NumberUtils  and  RandomUtils

  1. public class TestMain {

  2.  public static void main(String[] args) throws IllegalAccessException {

  3.   String str = "12.7";

  4.   /*

  5.    * org.apache.commons.lang.NumberUtils已经被弃用,

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

  7.    */

  8.   // 判断字符串是否为整数

  9.   NumberUtils.isDigits(str);

  10.   // 判断字符串是否为数字

  11.   NumberUtils.isNumber(str);

  12.   // 获取参数中最大的值,支持传入数组

  13.   NumberUtils.max(10, 20, 30);

  14.   // 获取参数中最小的值,支持传入数组

  15.   NumberUtils.min(10, 20, 30);

  16.   // 将字符串转换为int类型,支持float,long,short等数值类型

  17.   NumberUtils.toInt(str);

  18.   // 通过字符串创建BigDecimal类型 ,支持int,float,long等数值

  19.   NumberUtils.createBigDecimal(str);

  20.   /*

  21.    * RandomUtils帮助我们产生随机数,不止是数字类型 , 

  22.    * 连boolean类型都可以通过RandomUtils产生

  23.    */

  24.   RandomUtils.nextBoolean();

  25.   RandomUtils.nextDouble();

  26.   RandomUtils.nextLong();

  27.   // 注意这里传入的参数不是随机种子,而是在0~1000之间产生一位随机数

  28.   RandomUtils.nextInt(1000);

  29.  }

  30. }

4. 在开发当中字符串的使用和操作时最为频繁的,而null的字符串经常让我们报出NullPointerException,在使用StringUtils后,将不需要为字符串的null值而烦恼,却又提供了更多的操作让我们更方便的操作字符串

StringUtils

  1. public class TestMain {

  2.  public static void main(String[] args) throws IllegalAccessException {

  3.   String str = "Hello World";

  4.   /*

  5.    * 由于StringUtils拥有100+的方法,笔者不逐一列举用法,

  6.    * 只列举笔者认为常用的或笔者使用过的

  7.    */

  8.   // isEmpty和isBlank的区别在于isEmpty不会忽略空格,

  9.   // " "<--对于这样的字符串isEmpty会认为不是空,

  10.         // 而isBlank会认为是空,isBlank更常用

  11.   StringUtils.isEmpty(str);

  12.   StringUtils.isNotEmpty(str);

  13.   StringUtils.isBlank(str);

  14.   StringUtils.isNotBlank(str);

  15.   // strip      --> 去除两端的aa

  16.   // stripStart --> 去除开始位置的hell

  17.   // stripEnd   --> 去除结尾位置的orld

  18.   StringUtils.strip(str, "aa");

  19.   StringUtils.stripStart(str, "hell");

  20.   StringUtils.stripEnd(str, "orld");

  21.   // 返回字符串在第三次出现A的位置

  22.   StringUtils.ordinalIndexOf(str, "A", 3);

  23.   // 获取str 开始为hello结尾为orld中间的字符串

  24.   // 注意此方法返回字符串      -->substringBetween

  25.   // 注意此方法返回字符串数组(多了个s) --> substringsBetween

  26.   StringUtils.substringBetween(str, "hell", "orld");

  27.   StringUtils.substringsBetween(str, "hell", "orld");

  28.   // 重复字符串,第二种重载形式为在重复中用hahah拼接

  29.   StringUtils.repeat(str, 3);

  30.   StringUtils.repeat(str, "hahah", 2);

  31.   // 统计参数2在字符串中出现的次数

  32.   StringUtils.countMatches(str, "l");

  33.   // 判断字符串是否全小写或大写

  34.   StringUtils.isAllLowerCase(str);

  35.   StringUtils.isAllUpperCase(str);

  36.   // isAlpha        --> 全部由字母组成返回true

  37.   // isNumeric      -->全部由数字组成返回true

  38.   // isAlphanumeric -->全部由字母或数字组成返回true

  39.   // isAlphaSpace   -->全部由字母或空格组成返回true

  40.   // isWhitespace   -->全部由空格组成返回true

  41.   StringUtils.isAlpha(str);

  42.   StringUtils.isNumeric(str);

  43.   StringUtils.isAlphanumeric(str);

  44.   StringUtils.isAlphaSpace(str);

  45.   StringUtils.isWhitespace(str);

  46.   // 缩进字符串,第二参数最低为 4,要包含...

  47.   // 现在Hello World输出为H...

  48.   StringUtils.abbreviate(str, 4);

  49.   // 首字母大写或小写

  50.   StringUtils.capitalize(str);

  51.   StringUtils.uncapitalize(str);

  52.   // 将字符串数组转变为一个字符串,通过","拼接,支持传入iterator和collection

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

  54.   /*

  55.    * 经常性要把后台的字符串传递到前提作为html代码进行解释,

  56.    * 可以使用以下方法进行转换,以下方法输出为

  57.    * <p>Hello</p>

  58.    */

  59.   StringEscapeUtils.escapeHtml("Hello

  60. ");

  61.  }

  62. }

5.DateUtils and DateFormatUtils

  1. public class TestMain {

  2.  public static void main(String[] args) throws IllegalAccessException {

  3.   Date day1 = new Date();

  4.   /*

  5.    * 由于Aache的DateUtils和DateFormatUtils并没有Joda强大,

  6.    *  所以在这里只作简单的示例

  7.    */

  8.   

  9.   // 增加一天

  10.   DateUtils.addDays(day1, 1);

  11.   // 减少一年

  12.   DateUtils.addYears(day1, -1);

  13.   // 格式化时间,第三参数为国际化,表示按美国时间显示

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

  15.  }

  16. }

读者在使用时可能会发现,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文件中定义校验器 (校验方法)和校验规则。支持校验规则的和错误消息的国际化。

apache commons常用工具类相关推荐

  1. 常用工具类 (一) : Apache Commons 常用工具类整理 (全)

    文章目录 一.commons-lang3 引入依赖 StringUtils 字符串工具类 StringEscapeUtils 转义字符串工具类 NumberUtils 数字工具类 ArrayUtils ...

  2. org.apache.commons.commons-lang3工具类(一)

    https://blog.csdn.net/qq_31289187/article/details/85343068 本文只是简单的介绍了commons-lang3中的SystemUtils.Stri ...

  3. Apache Commons StringUtils工具类深入整理

    字符串是在程序开发中最常见的,Apache Commons开源项目在org.apache.commons.lang3包下提供了StringUtils工具类,该类相当于是对jdk自带的String类的增 ...

  4. 二、java项目常用工具类之beancopy,bean和map转换工具类

    项目环境: jdk1.8+spring4.3.12 一.问题描述及试用场景: 在项目规范中,要求类名以DO为尾的类作为数据库层实体bean,类名以MO为尾的类作为系统传输层实体bean,类名以VO为尾 ...

  5. Java中字符串工具类继承org.apache.commons.lang3.StringUtils类代码

    场景 转换为字节数组:是否包含字符串:替换掉HTML标签方法:替换为手机识别的HTML,去掉样式及属性,保留回车: 缩略字符串(不区分中英文字符):转换为Double类型:转换为Float类型:转换为 ...

  6. commons-lang3-3.2.jar中的常用工具类的使用

    这个包中的很多工具类可以简化我们的操作,在这里简单的研究其中的几个工具类的使用. 1.StringUtils工具类 可以判断是否是空串,是否为null,默认值设置等操作: /*** StringUti ...

  7. commons-lang常用工具类StringEscapeUtils使用--转

    https://my.oschina.net/ydsakyclguozi/blog/341496 在apache commons-lang(2.3以上版本)中为我们提供了一个方便做转义的工具类,主要是 ...

  8. java file ip_java常用工具类 IP、File文件工具类

    本文实例为大家分享了java常用工具类的具体实现代码,供大家参考,具体内容如下 IP工具类 package com.jarvis.base.util; import java.io.IOExcepti ...

  9. apache-commons 常用工具类

    引用包说明 本文引用的所有包如下 <dependency><groupId>org.apache.commons</groupId><artifactId&g ...

最新文章

  1. 孔雀翎----《Programming C# 》中文版 第4版
  2. xhtml中的五个块元素
  3. 如何编写优雅的代码:07. 设计模式应用案例(下)
  4. JasperReports JSF插件用例–简单列表报告
  5. 计算机四级必背知识点,2019年6月计算机四级数据库工程师必备考点
  6. feed流和瀑布流_基础知识讲解:什么是feed流?(图文)
  7. ~~核心编程(三):面向对象——逻辑交互与组合~~
  8. 基于OHCI的USB主机 —— UFI读扇区代码
  9. 这个为生信学习打造的开源 Python 文字教程真香!!!
  10. VS2019打包教程
  11. 怎么设置计算机键盘数字键,电脑右边的数字键不能用怎么办_电脑右边数字键盘用不了的修复方法...
  12. html转换vmax,CSS里px、em、rem、%、vw、vh、vmin、vmax这些单位的区别
  13. 七自由度冗余机械臂运动学逆解与工作空间分析MATLAB实现
  14. openGL es2.0 粒子系统之烟花
  15. 家事:庆祝父亲60岁生日
  16. html5文本框里插图片文字,word应用教程:在文本框内插入图片
  17. 怎么拼魔方6个面方法_怎样拼魔方,6面的
  18. 香港中文大学助理教授周博磊:十年之间的CVPR与我们
  19. 段鹏飞java_面向对象与多线程综合实验-网络编程
  20. Unity制作贪吃蛇

热门文章

  1. spring源码分析之@Conditional
  2. jedis连接sentinel示例程序
  3. spring启动过程之源码跟踪(续beanfactory)--spring Debug
  4. Lesson 13.3 梯度不平稳性与Glorot条件
  5. 签消费贷合同免费领取苹果手机? 捷信、马上等多家消费金融“躺枪”
  6. MAP(Mean Average Precision):
  7. 从谷歌的招聘中,我们学到了什么?
  8. redis php 持久化,详解Redis RDB持久化、AOF持久化,
  9. Linux kernel block device 的 submit_bio 都做了什么?
  10. oracle 11g autotrace,ORACLE 使用AUTOTRACE功能