commons-lang3
创建一个Springboot项目,然后在pom
文件中添加如下依赖。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
</dependency>
字符串工具类
在Java开发中经常会需要操作字符串,例如,判空,截取等操作,很多第三方依赖包中都提供了相似的工具类,比如StringUtils
类在Spring、Commons-Lang3中都有出现,例如下面的这些。
org.apache.commons.lang.StringUtils
isBlank
:字符串是否为空 (trim
后判断)。isEmpty
:字符串是否为空 (不trim
并判断)。equals
:字符串是否相等。join
:合并数组为单一字符串,可传分隔符。split
:分割字符串。EMPTY
:返回空字符串。replace
:替换字符串。trimToNull
:trim
后为空字符串则转换为null
。
org.apache.commons.lang3.StringUtils
isBlank
:字符串是否为空 (trim
后判断)。isEmpty
:字符串是否为空 (不trim
并判断)。equals
:字符串是否相等。join
:合并数组为单一字符串,可传分隔符。split
:分割字符串。EMPTY
:返回空字符串。replace
:替换字符串。capitalize
:首字符大写。
org.springframework.util.StringUtils
hasText
:检查字符串中是否包含文本。hasLength
:检测字符串是否长度大于0。isEmpty
:检测字符串是否为空(若传入为对象,则判断对象是否为null
)。commaDelimitedStringToArray
:逗号分隔的String
转换为数组。collectionToDelimitedString
:把集合转为CSV
格式字符串。replace
:替换字符串。delimitedListToStringArray
:相当于split
。uncapitalize
:首字母小写。collectionToDelimitedCommaString
:把集合转为CSV
格式字符串。tokenizeToStringArray
:和split基本一样,但能自动去掉空白的单词。
在上面这三个封装类中,我个人用的比较多的是org.apache.commons.lang3.StringUtils
。
// 下面用的都是org.apache.commons.lang3.StringUtils类
// 常用判空方法,注意isBlank和isEmpty的区别
// isBlank更准确
System.out.println(StringUtils.isBlank(""));// true
System.out.println(StringUtils.isBlank(" "));// true
System.out.println(StringUtils.isBlank(null));// true
System.out.println(StringUtils.isEmpty(""));// trye
System.out.println(StringUtils.isEmpty(" "));// false
System.out.println(StringUtils.isEmpty(null));// true
// 判断两字符串是否相同
System.out.println(StringUtils.equals("123", "123"));// true
System.out.println(StringUtils.equalsIgnoreCase("abc", "ABC"));// true
// 删除字符串中的空格
System.out.println(StringUtils.deleteWhitespace(" ab 1 cd "));// ab1cd
// 去除首位空格
System.out.println(StringUtils.strip(" ab 1 cd "));// ab 1 cd
// 统计字符串出现次数
System.out.println(StringUtils.countMatches("123321abc", "a"));// 1
// 比较两个字符串的不同之处,返回第二个参数与第一个参数所不同的字符串
System.out.println(StringUtils.difference("12345", "12354"));// 54
// 判断字符串是否是数字
System.out.println(StringUtils.isNumeric("123"));// true
System.out.println(StringUtils.isNumeric("12 3"));// false
System.out.println(StringUtils.join(new String[] {"1", "2", "3"}, ";"));// 1;2;3
除了StringUtils
、DateUtils
、ArrayUtils
等常规工具类之外,还有许多非常规工具。如果能掌握好这些工具类,对开发会有很大助益,可以避免很多重复造轮子的工作。
I/O工具类
I/O
工具类也有三种可供选择。
org.apache.commons.io.IOUtils
closeQuietly
:关闭一个IO
流、Socket
或者Selector
且不抛出异常,通常放在finally
块。toString
:转换IO
流、URI
、byte[]
为String
。copy
:IO流数据复制,从输入流写到输出流中,最大支持2GB。toByteArray
:从输入流、URI获取byte[]
。write
:把字节、字符等写入输出流。toInputStream
:把字符转换为输入流。readLines
:从输入流中读取多行数据,返回List<String>
。copyLarge
:同copy
,支持2GB以上数据的复制。lineIterator
:从输入流返回一个迭代器,根据参数要求读取的数据量,全部读取,如果数据不够则失败。
org.apache.commons.io.FileUtils
deleteDirectory
:删除文件夹。readFileToString
:以字符形式读取文件内容。deleteQueitly
:删除文件或文件夹且不会抛出异常。copyFile
:复制文件。writeStringToFile
:把字符写到目标文件,如果文件不存在则创建。forceMkdir
:强制创建文件夹,如果该文件夹父级目录不存在,则创建父级。write
:把字符写到指定文件中。listFiles
:列举某个目录下的文件(根据过滤器)。copyDirectory
:复制文件夹。forceDelete
:强制删除文件。
org.apache.commons.io.FilenameUtils
getExtension
:返回文件后缀名。getBaseName
:返回文件名,不包含后缀名。getName
:返回文件全名。concat
:按命令行风格组合文件路径(详见方法注释)。removeExtension
:删除后缀名。normalize
:使路径正常化。wildcardMatch
:匹配通配符。seperatorToUnix
:路径分隔符改成unix
系统格式的,即/
。getFullPath
:获取文件路径,不包括文件名。isExtension
:检查文件后缀名是不是传入参数(List<String>
)中的一个。
数组工具类
org.apache.commons.lang.ArrayUtils
org.apache.commons.lang3.ArrayUtils
contains
:是否包含某个字符串。addAll
:添加整个数组。clone
:克隆一个数组。isEmpty
:是否空数组。add
:向数组添加元素。subarray
:截取数组。indexOf
:查找某个元素的下标。isEquals
:比较数组是否相等。toObject
:基础类型数据数组转换为对应的Object
数组。
// 下面用的都是org.apache.commons.lang3.ArrayUtils
// 创建数组
String[] array = ArrayUtils.toArray("1", "2");
// 给数组添加元素,添加到列表中最后一个位置
ArrayUtils.add(T[] array, T element);
// 给数组添加元素,添加到列表中第一个位置
ArrayUtils.addFirst(T[] array, T element);
// 批量给数组添加元素
ArrayUtils.addAll(T[] array, T element);
// 删除相关
ArrayUtils.remove(T[] array, int index);
ArrayUtils.removeElements(T[] array, T... values);
ArrayUtils.removeAll(T[] array, T... indices);
// 将数组元素随机排序
ArrayUtils.shuffle(T[]array);
// 交换两个数组元素的位置
ArrayUtils.swap(T[] array, int offset1, int offset2);
// 将数组转换为封装类型的数组
ArrayUtils.toObject(int[] array);// ==> Integer[]
// 将数组转换为基本类型的数组
ArrayUtils.toPrimitive(Integer[] array);// ==> int[]
// 二维数组转换成MAP
Map<Object, Object> map = ArrayUtils.toMap(new String[][] {
{ "RED", "#FF0000" }, { "GREEN", "#00FF00" }, { "BLUE", "#0000FF" } });
// RED -> #FF0000, GREEN -> #00FF00, BLUE -> #0000FF
数字相关工具类
// org.apache.commons.lang3.RandomStringUtils
// 生成指定长度的字母和数字的随机组合字符串
System.out.println(RandomStringUtils.randomAlphanumeric(32));
// 生成指定长度的字母随机字符串
System.out.println(RandomStringUtils.randomAlphabetic(32));
// 生成指定长度的数字随机字符串
System.out.println(RandomStringUtils.randomNumeric(32));
// 在指定字符串中生成指定长度的随机字符串
System.out.println(RandomStringUtils.random(16, "abcde12345"));
// 从字符或数字中生成指定长度的随机字符串
System.out.println(RandomStringUtils.random(32, true, false));
System.out.println(RandomStringUtils.random(32, false, true));
// 生成一个从ASCII第32个字符开始,到第126个字符结束的,不包含字母和数字的的指定长度随机字符串
System.out.println(RandomStringUtils.randomPrint(32));
// 生成一个从ASCII第33个字符开始,到第126个字符结束的,不包含字母和数字的的指定长度随机字符串
System.out.println(RandomStringUtils.randomGraph(32));
// 生成一个0~2147483647之间的随机数
System.out.println(RandomUtils.nextInt());
// 生成一个1~100之间的随机数
System.out.println(RandomUtils.nextInt(1, 100));
// 生成一个0~9223372036854775807之间的随机数
System.out.println(RandomUtils.nextLong());
// 生成一个1~100之间的随机数
System.out.println(RandomUtils.nextLong(1, 100));
// org.apache.commons.lang3.math.NumberUtils
// 从数组中选出最大/小值,这也是一种得到最大/小值的快捷方式
System.out.println(NumberUtils.max(5, 1, 47, 23));// 47
System.out.println(NumberUtils.min(3, 1, 7, 10));// 1
// 判断字符串是否是整数
System.out.println(NumberUtils.isDigits("153.4"));// false
// 判断字符串是否是有效数字
System.out.println(NumberUtils.isNumber("0321.1"));// true
// 空字符串会被转换为0.0
System.out.println(NumberUtils.toFloat(""));// 0.0
实体相关工具类
org.apache.commons.lang3.ClassUtils
getShortClassnNme
:得到类名,不带路径前缀。getName
:带路径前缀。getPackageName
:得到包名。getAllSuperClasses
:得到全部父类。getAllInterfaces
:得到全部父接口。hierarchy
:得到继承体系,包括自身。
org.apache.commons.lang3.ObjectUtils
allNull
:如果全部对象都是null
,就返回true
。allNotNull
:和allNUll
相反。clone
:克隆对象,不仅仅是简单的复制。
org.springframework.beans.BeanUtils
copyPeoperties
:复制属性值,从一个对象到另一个对象。findDeclaredMethod
:找到声明的方法。getPropertyDescriptor
:得到属性描述。instantiate
:实例化类对象。
org.apache.commons.beanutils.BeanUtils
copyPeoperties
:复制属性值,从一个对象到另一个对象。getProperty
:获取对象属性值。setProperty
:设置对象属性值。populate
:根据Map给属性复制。copyPeoperty
:复制单个值,从一个对象到另一个对象。cloneBean
:克隆bean
实例。
org.apache.commons.beanutils.PropertyUtils
getProperty
:获取对象属性值。setProperty
:设置对象属性值。getPropertyDiscriptor
:获取属性描述器。isReadable
:检查属性是否可访问。copyProperties
:复制属性值,从一个对象到另一个对象。getPropertyDiscriptors
:获取所有属性描述器。isWriteable
:检查属性是否可写。getPropertyType
:获取对象属性类型。
// org.apache.commons.lang3.ObjectUtils
// 所有的对象为null就返回true,还有allNotNull
System.out.println(ObjectUtils.allNull("null", null));// false
// 任意一个对象为null就返回true,还有anyNotNull
System.out.println(ObjectUtils.anyNull("null", null));// true
// 克隆对象
Object object = ObjectUtils.clone(new ArrayList<>());
System.out.println(object instanceof List);// true
object = ObjectUtils.clone(null);
System.out.println(object);// null
// org.apache.commons.lang3.ClassUtils
// 得到类名
System.out.println(ClassUtils.getShortClassName(Integer.class));// Integer
System.out.println(ClassUtils.getSimpleName(Integer.class));// Integer
System.out.println(ClassUtils.getName(Integer.class));// java.lang.Integer
// 得到包名
System.out.println(ClassUtils.getPackageName(Integer.class));// java.lang
// 得到全部父类
List<Class<?>> list1 = ClassUtils.getAllSuperclasses(LinkedHashMap.class);
list1.forEach(item -> System.out.println(ClassUtils.getName(item)));
System.out.println("+++++++");
// 得到全部父接口
List<Class<?>> list2 = ClassUtils.getAllInterfaces(LinkedHashMap.class);
list2.forEach(item -> System.out.println(ClassUtils.getName(item)));
System.out.println("+++++++");
// 得到继承体系(含自身)
Iterable<Class<?>> iterable = ClassUtils.hierarchy(LinkedHashMap.class);
iterable.forEach(item -> System.out.println(ClassUtils.getName(item)));
// 是否是内部类
System.out.println(ClassUtils.isInnerClass(InnerClass.class));// true
加密工具类
org.apache.commons.codec.digest.DigestUtils
md5Hex
:MD5
加密,返回32位字符串。sha1Hex
:SHA-1
加密。sha256Hex
:SHA-256
加密。sha512Hex
:SHA-512
加密。md5
:MD5
加密,返回16位字符串。
感谢支持
更多内容,请移步《超级个体》。