java commons库之一:基础库lang(1)

前言
如果想要提高开发效率,就少不了对一些公共库的使用。java常用的公共类库有不少,包括apache commons、guava之类的,这里单独讲下apache commons,apache commons的类库在很多开源项目里都有使用,各种各样,有辅助使用的util,也有单独功能的,我按照使用的频率把常用的一些整理出来。


这次先从commons里最常见的**commons lang**开始
lang对应的是java.lang,也就是java默认的系统包,这个库如其名,就是对系统包的加强。目前lang的版本已经更新到lang3了,因为lang本身基本没啥依赖,所以基本需要的时候直接把jar包或maven pom引入就行
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.6</version>
        </dependency>

lang的内容主要包括下面几个部分
1.基本功能:由一堆utils组成,包括StringUtils(字符串),ArrayUtils(数组),RandomUtils(随机数),SystemUtils(系统信息)等
2.time(日期时间):主要是对日期时间简化功能
3.math(数学):一些数字类型转换的功能
4.concurrent(并发):一些对java.util.concurrent下面功能的简化
5.text(文本):对文本功能的封装,与字符串不同
6.reflect(反射):一些可以直接操作对象和成员的接口
7.mutable(变量):对基本类型,比如Integer之类的封装,可以进行引用操作
8.tuple(元组):提供了元组类型

篇幅有限,今天先列举下基本功能。

StringUtils

StringUtils是最常用字符串辅助工具包之一,里面包含了不少能够简化操作的功能。

IsEmpty/IsBlank:判断字符串是否为空,isEmpty是判断是否null,而isBlank更强大可以判断length是否为0
equals*/compare*:字符串比对,跟String自带的没大区别,但是自带null判断,不会出现空指针的问题
trim*/strip*:trim同上面的,也是对应String自带的部分,同样不会空指针的问题,strip要更强大一些,可以兼容更多的空字符串。
defaultString:字符串默认取值功能,可以在字符串为null或空的时候自动返回”“或指定的值
indexOf*/lastIndexOf*:原本String的加强版,支持更多方式,支持输入多个字符串
difference:求第二个字符串与第一个字符串不同的地方
substring*:字串造成,原本String的加强版,除了能根据字符串的坐标进行截取外,还有其他几种选择
    substringAfter和substringBefore,可以根据前后的字符串内容进行截取
    比如StringUtils.substringBefore("abcba", "b") = "a"
    substringBetween可以通过区间内容进行截取
    比如获取tag中的内容
    StringUtils.substringBetween("tagabctag", "tag") = "abc"
    还可以获取某些闭合区间之间的内容,比如获取[]中的值
    StringUtils.substringsBetween("[a][b][c]", "[", "]") = ["a","b","c"]
    这种一般需要使用正则表达式实现的内容,可以在这里一句话搞定
startWith*/endWith*:判断字符串开始或结束的位置是否存在指定的字符串
reverse:颠倒字符串,很好玩吧
swapCase:大小写互换
left*/right*/truncate:这几个都是截断字符串的功能
leftPad/rightPad:截断或补充字符串,如果少了就截断,如果多了就补充
比如这样
System.out.println(StringUtils.leftPad("45643", 8, "0"));
结果为:00045643
rotate:移动操作,类似于汇编里的循环位移,不过这次移动内容是字符串
join:字符串组合功能,String里已经有join了,StringUtils的join更强大,支持其他一大堆数据类型
spilt:拆分字符串,相比String里别扭的正则法,这个可以直接用指定字符串或字符进行拆分
splitByCharacterTypeCamelCase:对字符串采用驼峰规则进行拆分
如它自带的这个例子
StringUtils.splitByCharacterTypeCamelCase("ASFRules")   = ["ASF", "Rules"]
overlay:对字符串的指定位置进行覆盖,这个覆盖可以与覆盖的位置大小不同
StringUtils.overlay("abcdef", "zzzz", 8, 10)  = "abcdefzzzz"
wrap:字符串包装,就是给字符串两侧加上指定的字符串
unwrap:把包装的字符串删掉,比如’java’ unwrap后为 java
repeat:复制字符串自己,并且合并起来
remove*:删除字符串的某些内容,与c++std里的string不同,java的String不带删除,可以用StringUtils里这个接口来删除其中匹配的子串
getCommonPrefix:得到几个字符串都有的前缀
abbreviate:获取字符串的简写
System.out.println(StringUtils.abbreviate("随着网络的发展和智能手机的大面积普及,我们当中的很多人在遇到医学问题时会立即拿起手机上", 10));
结果为:随着网络的发展...
appendIfMissing:很有用的方法,添加字符串到字符串的后面,可以判断是否后面已经有这个字符串
System.out.println(StringUtils.appendIfMissing("随着网络的发展和智能手机的大面积普及", "普及"));
结果:随着网络的发展和智能手机的大面积普及
System.out.println(StringUtils.appendIfMissing("随着网络的发展和智能手机的大面积普及", "数据"));
结果:随着网络的发展和智能手机的大面积普及数据
capitalize:首字母大写
center:字符串居中,就是给前面补充空格
countMatches:字符串内部的一个统计方法
toEncodedString:等同于String的构造,将byte[]转到String

以上就是StringUtils的大体内容

ArrayUtils

ArrayUtils是对java数组和Arrays的补充

add:数组添加,系统数组不支持添加操作,可以通过这个方法对数组添加元素
contains/indexOf:查找元素
insert:数组内容插入,参照add
shuffle:打乱数组内容顺序

其他还有一些,自己可以根据需要去看javadoc

SystemUtils

与java系统相关的util,可以理解为System包的扩展
这个里面包含的主要是一些常量,包括

IS_JAVA_:当前jvm的判断判断
IS_OS_:操作系统类型和版本判断,某些跟操作系统有耦合的地方可以用到
JAVA_VERSION:当前jvm版本

还有些参数,如目录之类的获取,基本是对System.getenv的封装
比如OS_ARCH是CPU信息,OS_NAME是操作系统信息,USER_DIR是当前用户目录等

ThreadUtils

线程类util,封装了部分简单的线程操作
包括线程查询findThread,获取全部线程getAllThread等,本身非常简单,并不是专业的Thread类

RandomUtils

随机数util,对Random的封装,里面包含了与其类似的next方法,不过可以指定随机数的范围,而且不需要自己再单独维护一个Random对象

RandomStringUtils

随机字符串util,在RandomUtil基础上进行了增加,可以通过指定字符集生成随机字符串

SerializationUtils

序列化util,主要包含了serialize和deserialize两个方法,如果使用传统的序列化方式,你需要new一个ObjectInputStream或ObjectOutputStream对象
这两个方法可以直接通过byte[]或inputstream直接进行序列化或反序列化

ObjectUtils

相当于java7之后Objects的强化类,专门补充Object对象的操作

除了以上之外还包括:

BooleanUtils:boolean类型的增强,主要用于boolean类型的比较,转换,可以支持int、字符串以及其他很多词语对boolean的转换,如yes、no、off、no等
CharUtils:针对字符的辅助功能,包括字符的转换、判断等,
ArchUtils:处理器工具,可以用了获取当前处理器信息
Validate:校验工具,可以对很多类型的变量进行值判断,并且抛出异常,异常的内容或判断的范围可以定制。

以上就是lang里包含的大部分基本操作,因为每个对象里都有很多方法,很多就不单独列出来了,大家可以根据需要看看有哪些类是能够帮助自己在开发中用到的。
下一节将介绍lang的其他一些类,使用的范围也会更大。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值