别在重复造轮子欢迎使用apache的commons-lang3工具-帮你书写优雅代码

原创 xiaozhang 程序员xiaozhang 2023-07-01 23:10 发表于上海

收录于合集#Java27个

相信做开发做的久的小伙伴,都会在项目中建一个Utils的工具包。然后也写一大堆的工具类代码(很可能这些代码都是复制粘贴来的)。其实apache给我们提供了一个很强大的开源工具包,大家只要使用的好,能减少很多不必要的代码,它就是apache提供的众多commons工具包,而common里面lang3包更是被我们使用得最多的。因此本文主要详细讲解lang3包里面类的使用,希望以后大家使用此工具包,写出优雅的代码。

在日常工作中,我们经常要使用到一些工具类,比如String,Date等等。有时候我们并不清楚有这些工具类的存在,造成在开发过程中重新实现导致时间浪费,且开发的代码质量不佳。而apache其实已经提供了系列的工具包给我们使用,只是大多数人,平时没有注意到。我将带领大家熟悉这些常用的工具包,让大家熟悉Apache都给我们提供了那些常用的工具类和方法,大家站在巨人的肩膀上去开发【有句话说的好,前人栽树后人乘凉】。

要使用common里面的lang3需要在pom里面添加如下的依赖:

<dependency>            <groupId>org.apache.commons</groupId>            <artifactId>commons-lang3</artifactId>            <version>3.10</version></dependency>目前虽然不是最新,但是功能够用了。也没必要使用最新的,万一最新的有bug呢,所以用这个版本就可以了。

里面相关的类的截图如下:

图片

好了下面就我们开发中会常常使用的工具类进行讲解一下,有了这么好的工具类欢迎大家开发的时候去使用。哈哈哈,最经典的工具类放在最后介绍了,压箱底。

                                       ONE

ArrayUtils:用于对数组的操作,如添加、查找、删除、子数组、倒序、元素类型转换等

它首先给我们提供了8中基本数据类型以及包装类以及各种类型的长度为0的空数组。所以以后需要长度为0的数组,可以不用new了,直接用这个即可,并且是线程安全的。如下:

图片

下面讲一下它比较好用的方法。

1.1:  toArray:可以简便的构建一个数组,如下:

 public static void main(String[] args) {        String[] strings = ArrayUtils.toArray("苹果", "香蕉", "西瓜");        System.out.println(strings);    }

1.2:add:可以向数组里面添加一个元素【注意它返回的是一个新数组】,如下:

 String[] strings = ArrayUtils.toArray("苹果", "香蕉", "西瓜"); strings = ArrayUtils.add(strings,"橘子") ; strings = ArrayUtils.add(strings,"啥都不是的") ; System.out.println(strings.length);

1.3:toObject/toPrimitive:这两个方法很有用 可以实现比如int[]和Integer[]数组之间的互转。

Integer[] inArr = new Integer[]{3, 6, 9};int[] ints = ArrayUtils.toPrimitive(inArr);Integer[] integers = ArrayUtils.toObject(ints);System.out.println(integers.length);

这个数组工具里面还有很多方法,由于要讲的其他类还有很多。就不一一展示了,它的方法都很好懂,都是那种见名知意的方法。欢迎大家使用到数组工具的时候去使用这个工具类。

TWO

ClassPathUtils:处理类路径的一些工具类

2.1:toFullyQualifiedName(Class<?> context, String resourceName) 返回一个由class包名+resourceName拼接的字符串。有了这个方法在开发中你需要找一个类的包名,一下子就找到了。如下使用:

 String fullPath = ClassPathUtils.toFullyQualifiedName(BeanDefinition.class, ""); System.out.println(fullPath); // result : org.springframework.beans.factory.config. String fullPath1 = ClassPathUtils.toFullyQualifiedName(BeanDefinition.class, "BeanDefinition"); System.out.println(fullPath1); // result : org.springframework.beans.factory.config.BeanDefinition

2.2:toFullyQualifiedPath(Class<?> context, String resourceName) 返回一个由class包名+resourceName拼接的字符串。看下面结果你如果想要包名这样展示,也是可以的,太方便啦开发中如果有获取类似包的需求请直接使用这个。

String stringUtils = ClassPathUtils.toFullyQualifiedPath(StringUtils.class, "StringUtils"); System.out.println(stringUtils); // result: org/apache/commons/lang3/StringUtils

THREE

ClassUtils – 用于对Java类的操作

3.1:getAllSuperclasses(Class<?> cls):获取到该类的所有父类 注意:只是父类 不包含接口。

 List<Class<?>> allSuperclasses = ClassUtils.getAllSuperclasses(LinkedList.class); System.out.println(ArrayUtils.toString(allSuperclasses));

3.2:getAllInterfaces(Class<?> cls):同上。但此方法指的是接口。这个2种方法如果你是那种框架的开源作者用的比较多,我们做基本需求的开发者使用的应该较少。

  List<Class<?>> allSuperclasses = ClassUtils.getAllInterfaces(LinkedList.class);  System.out.println(ArrayUtils.toString(allSuperclasses));

3.3:isAssignable( Class<?>[] classArray, Class<?>... toClassArray):是否是相同的class类型 支持class、数组等等 挺实用的。

System.out.println(ClassUtils.isAssignable(Integer.class,String.class));  // result : false

FOUR

CharUtils:对Char操作的工具类。

4.1:toIntValue(Char char):将字符转换为其表示的整数,字符如果不是数字会抛出异常。

System.out.println(CharUtils.toIntValue('1')); // result :1System.out.println(CharUtils.toIntValue('a')); // 抛出异常

4.1:isAscii(Char char) 检查字符是否为ASCII 7位。

System.out.println(CharUtils.isAscii('a') ); // result :trueSystem.out.println(CharUtils.isAscii('在') ); //  result :false

还有一些其他的方法,这个工具类貌似开发中使用的少,大家按需使用这个类。

FIVE

ObjectUtils:Object处理的工具类,线程安全,里面有很多好用的方法。希望你在开发中好好使用这个类。

图片

5.1:isEmpty(Object obj)检查对象是空的还是null。如下用途很广,也可以对String进行判断,当然对String判断不建议使用这个,后面关于String的工具方法有更好用的。【PS关于这个类的很多方法同样对于String成立,但由于关于String有更好用的工具类,所以String类型不建议使用这个类的方法】

 System.out.println( ObjectUtils.isEmpty(null));  // true System.out.println( ObjectUtils.isEmpty("")); // true System.out.println(ObjectUtils.isEmpty("ab")) ; // false System.out.println(ObjectUtils.isEmpty(new int[]{}) );  // true System.out.println( ObjectUtils.isEmpty(new int[]{1,2,3})) ; // false System.out.println(ObjectUtils.isEmpty(1234) ) ;   // false

5.2:notEqual(Object o1,Object o2):比较两个对象是否不相等,其中一个或两个对象都可以null。

 System.out.println(ObjectUtils.notEqual(null, null) ); // false System.out.println( ObjectUtils.notEqual(null, "")); // true System.out.println( ObjectUtils.notEqual("", null));// true System.out.println(ObjectUtils.notEqual("", "")); // false System.out.println(ObjectUtils.notEqual(Boolean.TRUE, null) ); // true System.out.println( ObjectUtils.notEqual(Boolean.TRUE, "true")); // true System.out.println( ObjectUtils.notEqual(Boolean.TRUE, Boolean.TRUE)); // false System.out.println(ObjectUtils.notEqual(Boolean.TRUE, Boolean.FALSE)); // true

SIX

StringUtils:处理字符串的工具类,这个类用途太多了太重要了压轴的往往都放在最后,开发中使用的使用范围太广了。同时它也是线程安全的,如下:

图片

6.1:equals(String str1,String str2)判断2个字符串是否相同,这里你也不需要去管null的字符串,它都会给你判断的,不用去关注空指针异常了,非常好用。

 System.out.println( StringUtils.equals(null, null) ); // true System.out.println(StringUtils.equals(null, "abc")); // false System.out.println(StringUtils.equals("abc", null)); // false System.out.println(StringUtils.equals("abc", "abc")); // true System.out.println(StringUtils.equals("abc", "ABC")); // false

6.2:isAllBlank( CharSequence... css) :判断字符串是否全部为null 空或者空白的字符。

 System.out.println(StringUtils.isAllBlank(null)  ); // true System.out.println(StringUtils.isAllBlank(null, "foo") ); // false System.out.println(StringUtils.isAllBlank(null, null) ); // true System.out.println(StringUtils.isAllBlank("", "bar") ); // false System.out.println(StringUtils.isAllBlank("bob", "") ); // false System.out.println(StringUtils.isAllBlank("  bob  ", null) ); // false System.out.println(StringUtils.isAllBlank(" ", "bar")); // false System.out.println(StringUtils.isAllBlank("foo", "bar") ); // false System.out.println(StringUtils.isAllBlank(new String[] {})); // true

6.3:isAnyBlank( CharSequence... css):判断字符串是否有空的,如果有一个为空直接返回为true。

 System.out.println(StringUtils.isAnyBlank((String) null) ); // true System.out.println(StringUtils.isAnyBlank((String[]) null)); // false System.out.println(StringUtils.isAnyBlank(null, "foo"));// true System.out.println(StringUtils.isAnyBlank(null, null) ); // true System.out.println(StringUtils.isAnyBlank("", "bar")); // true System.out.println(StringUtils.isAnyBlank("bob", "")); // true System.out.println(StringUtils.isAnyBlank("  bob  ", null) );// true System.out.println(StringUtils.isAnyBlank(" ", "bar")); // true System.out.println(StringUtils.isAnyBlank(new String[] {})); // false System.out.println(StringUtils.isAnyBlank(new String[]{""})); // true System.out.println(StringUtils.isAnyBlank("foo", "bar") ); // false

6.4:isBlank(String str):判断字符串是否为空(null,"",或者空白的字符串)。

System.out.println(StringUtils.isBlank(null)); // trueSystem.out.println(StringUtils.isBlank("")); // trueSystem.out.println(StringUtils.isBlank(" ") ); // trueSystem.out.println(StringUtils.isBlank("bob")); // falseSystem.out.println( StringUtils.isBlank("  bob  "));  // false

6.5:isNumeric(String str):判断字符串是否仅包含数字,小数点不是数字返回false。

System.out.println( StringUtils.isNumeric(null)); // falseSystem.out.println(StringUtils.isNumeric("") ); // falseSystem.out.println(StringUtils.isNumeric("  ") ); // falseSystem.out.println(StringUtils.isNumeric("123")); // trueSystem.out.println(StringUtils.isNumeric("12 3")); // falseSystem.out.println(StringUtils.isNumeric("ab2c")); // falseSystem.out.println(StringUtils.isNumeric("12.3")); // falseSystem.out.println(StringUtils.isNumeric("+123")); // false

6.6:join:将数组中的元素按照指定的字符,连接成一个字符串,非常的好用,当然这个方法也适适用于集合中元素的连接。

System.out.println(StringUtils.join(Arrays.asList("a","b","c"),";")); // a;b;cSystem.out.println(StringUtils.join(Arrays.asList("a","b","c"), null)); // abcSystem.out.println( StringUtils.join(Arrays.asList("a","b","c"), "") ); //abc

6.7:length(String str):返回字符串的长度,null返回0。不会报空指针异常很好用。

 System.out.println(StringUtils.length(null)); // 0 System.out.println(StringUtils.length("aa")); //2

6.8:deleteWhitespace(String str):删除空格,方法比较好用比trim好用。

 System.out.println(StringUtils.deleteWhitespace(null)); // null System.out.println(StringUtils.deleteWhitespace("")  ); // "" System.out.println(StringUtils.deleteWhitespace("abc")); // abd System.out.println(StringUtils.deleteWhitespace("   ab  c  ")); // abc

6.9:rightPad(final String str, final int size, final char padChar):这个方法还是蛮管用的。对于生成统一长度的字符串的时候。比如生成订单号,为了保证长度统一,可以右边自动用指定的字符补全至指定长度。非常好用写的代码多了你就知道这个方法有多好了。【对应的:leftPad 左边自动补全】

System.out.println(StringUtils.rightPad("bat", 3,"0")); // batSystem.out.println(StringUtils.rightPad("bat", 5,"0")) ; // bat00System.out.println(StringUtils.rightPad("bat", 1,"0"));  // batSystem.out.println(StringUtils.rightPad("bat", -1,"0")); // bat

6.10:isAlpha(String str):判断字符串是否全由字母组成 (只要存在汉字、中文、数字都为false)。

System.out.println(StringUtils.isAlpha(null)); //falseSystem.out.println(StringUtils.isAlpha("") ); // falseSystem.out.println(StringUtils.isAlpha("  ")); //falseSystem.out.println(StringUtils.isAlpha("abc")); // trueSystem.out.println(StringUtils.isAlpha("ab2c")); //falseSystem.out.println(StringUtils.isAlpha("ab-c")); //false

6.11:uncapitalize(String str):首字母转换为小写。

System.out.println(StringUtils.uncapitalize(null)); // nullSystem.out.println(StringUtils.uncapitalize("cat")); // catSystem.out.println(StringUtils.uncapitalize("Cat")); // catSystem.out.println(StringUtils.uncapitalize("CAT")); // cAT

6.12:reverse(String str):字符串反转。

 System.out.println(StringUtils.reverse(null));// null System.out.println(StringUtils.reverse("") ); // "" System.out.println(StringUtils.reverse("bat") ); // tab

好了给大家总结了其中的一些工具类的使用,也是写了很长时间,当然也只是介绍了一部分,里面当然还有很多很好用的方法。欢迎大家去理解使用。俗话说师傅领进门,修行靠个人。我们开发的时候要学会使用工具类,站在前人的肩膀上开发,长江后浪推前浪,一浪更比一浪强,也期待大家能开发出更有用的工具类。

后面是一点杂谈

今天是2023年下半年的第一天,时间这玩意真的禁不起猛然的回头望,一晃神过来2023年的上半年已经过去了。就感觉过去的半年和之前的剧本一模一样,轰轰烈烈的开始,然后又平平淡淡的过去。其实平平淡淡才是我们普通人的生活,一屋两人三餐四季也是很多人羡慕的生活。所以不要去遗憾时间的过去,用心的去过好每一天。今天是新的一天,也是新的半年,祝你一些都好,当然七月你好呀。欢迎关注我的微信公众号啊,努力给大家推出更优质的文章。

程序员xiaozhang

发布一些java通俗易懂的知识和源码解读,搞笑技术博主

36篇原创内容

公众号

图片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值