1. 技术目标
- 目标01:StringUtils工具类
- 目标02:ArrayUtils工具类
- 目标03:ObjectUtils工具类
- 目标04:StringEscapeUtils工具类
- 目标04:反射相关
- 目标05:其他不常用的
2. 技术介绍
apache-common是开源第三方Java组件中最常用的系列,其中包括了大量jar包。其中apache-common-lang是最核心与基础的jar包,lang代表language,意为对Java语言的补充。例如其中一个重要的原则就是null兼容,因为Java中对null的处理并不优雅,程序员一不小心就会抛出NullPointerException(这一点在同为JVM语言的Groovy中就大大不同)。所以在写程序的时候尽量使用apache-common组件提供的工具代码。
正因为它是基础,将它命名为『云南白药』,意为行走江湖必备。
3. 环境配置
3.1 基础环境
- common-lang.jar包
4. 技术详解
4.1 ArrayUtils工具类
int[] a = { 1, 5, 6, 8 };
// 01.数组转换成字符串
String string = ArrayUtils.toString(a);
// 02.在一个数组中查找某个元素是否存在
System.out.println("intArray contains '8'?" + ArrayUtils.contains(a, 9));
System.out.println("intArray index of '8'?" + ArrayUtils.indexOf(a, 9));
System.out.println("intArray last index of '8'?" + ArrayUtils.contains(a, 9));
// 03.原始类型转换成包装类
Integer[] object = ArrayUtils.toObject(a);
System.out.println(object[2]);
4.2 StringUtils工具类
4.2.1 语义化判断
// 判断是否为null和””
StringUtils.isEmpty("");
// 在前者基础上,”“字符串也返回true
StringUtils.isBlank("");
StringUtils.isBlank(null);
// 和前者相反,在代码中使用更加语义化,容易理解
StringUtils.isNotBlank("");
// 不要再使用Integer.parseInt()方法并在异常拦截块中做判断了
StringUtils.isNumeric("");
// 两者是否相等,省略了null判断的过程
StringUtils.equals("", "");
// 判断请求的后缀是否是.html结尾
StringUtils.endsWithIgnoreCase(targetUrl, ".html")
StringUtils.substringBetween(result, "\"openid\":\"", "\"}");
4.2.2 日志打印
//实现=======的效果,用于打日志
StringUtils.repeat("=", 50);
//实现 %%%%%%%%Customised Header%%%%%%%%效果
String msg = StringUtils.center(" Customised Header ", 50, "%");
4.2.3 String与数组转化
//将一个array中的String连接起来,用分隔符隔开
StringUtils.join(array, ",");
//相反,把用分隔符隔开的string转为数组
StringUtils.split(string, ",");
4.2.4 代码的可读性
//加强代码可读性,减少if判断
StringUtils.defaultString(String str, String defaultValue)
//缩写一个长string,若不足则不干任何事,否则截断并在末尾添加”…”
StringUtils.abbreviate(str,5)
4.3 ObjectUtils工具类
//可以方便的打印各种嵌套复杂类,集合类中所有的值,不必自己去实现toString()方法,可以用来在日志中输出。
ObjectUtils.toString();
//增强代码可读性,如果obj为null返回defaultObj,这一点在common-lang包中一脉相承
ObjectUtils.defaultIfNull(obj, defaultObj);
//是否相等,等价于obj.equals(obj2),省略了null判断
ObjectUtils.equals(obj, obj2);