Java基础学习(六)commons-lang介绍(一)

Commons Lang这一组API主要是提供一些基础的、通用的操作和处理,如自动生成toString()的结果、自动实现hashCode()和equals()方法、数组操作、枚举、日期和时间的处理等等。

1.commons.lang包

这一组API的所有包名都以org.apache.commons.lang开头,共有如下8个包

org.apache.commons.lang

org.apache.commons.lang.builder

org.apache.commons.lang.enum

org.apache.commons.lang.enums

org.apache.commons.lang.exception

org.apache.commons.lang.math

org.apache.commons.lang.mutable

org.apache.commons.lang.time

lang包主要是一些可以高度重用的Util类

lang.enum已不建议使用,替代它的是紧随其后的lang.enums包; 
lang.enums包顾名思义用于处理枚举; 
lang.builder包包含了一组用于产生每个Java类中都常使用到的toString()、hashCode()、equals()、compareTo()等等方法的构造器; 
lang.exception包用于处理Java标准API中的exception,为1.4之前版本提供Nested Exception功能; 
lang.math包用于处理数字; 
lang.mutable用于包装值型变量; 
lang.time包提供处理日期和时间的功能。

2.commons.lang包下的静态util类

在org.apache.commons.lang包中提供了一些有用的包含static方法的Util类。除了6个Exception类和2个已经deprecated的数字类之外,commons.lang包共包含了17个实用的类:

ArrayUtils – 用于对数组的操作,如添加、查找、删除、子数组、倒序、元素类型转换等;
BitField – 用于操作位元,提供了一些方便而安全的方法;
BooleanUtils – 用于操作和转换boolean或者Boolean及相应的数组;
CharEncoding – 包含了Java环境支持的字符编码,提供是否支持某种编码的判断;
CharRange – 用于设定字符范围并做相应检查;
CharSet – 用于设定一组字符作为范围并做相应检查;
CharSetUtils – 用于操作CharSet;
CharUtils – 用于操作char值和Character对象;
ClassUtils – 用于对Java类的操作,不使用反射;
ObjectUtils – 用于操作Java对象,提供null安全的访问和其他一些功能;
RandomStringUtils – 用于生成随机的字符串;
SerializationUtils – 用于处理对象序列化,提供比一般Java序列化更高级的处理能力;
StringEscapeUtils – 用于正确处理转义字符,产生正确的Java、JavaScript、HTML、XML和SQL代码;
StringUtils – 处理String的核心类,提供了相当多的功能;
SystemUtils – 在java.lang.System基础上提供更方便的访问,如用户路径、Java版本、时区、操作系统等判断;
Validate – 提供验证的操作,有点类似assert断言;
WordUtils – 用于处理单词大小写、换行等。

3 ArchUtils

java运行环境的系统信息工具类

getArch();// 获取电脑处理器体系结构 32 bit、64 bit、unknown
getType();// 返回处理器类型 x86、ia64、ppc、unknown
is32Bit();// 检查处理器是否为32位
is64Bit();// 检查处理器是否为64位
isIA64();// 检查是否是英特尔安腾处理器类型
isPPC();// 检查处理器是否是电源PC类型
isX86();// 检查处理器是否是x86类型

4 ArrayUtils 数组工具类

4.1 添加数据

add(boolean[] array, boolean element) 将给定的数据添加到指定的数组中,返回一个新的数组

ArrayUtils.add(null, true)= [true]
ArrayUtils.add([true], false)= [true, false]
ArrayUtils.add([true, false], true) = [true, false, true]

add(boolean[] array, int index, boolean element)将给定的数据添加到指定的数组下标中,返回一个新的数组。

ArrayUtils.add(null, 0, true)= [true]
ArrayUtils.add([true], 0, false)= [false, true]
ArrayUtils.add([false], 1, true)= [false, true]
ArrayUtils.add([true, false], 1, true) = [true, true, false]

addAll(boolean[] array1, boolean... array2) 将给定的多个数据添加到指定的数组中,返回一个新的数组

ArrayUtils.addAll(array1, null)= cloned copy of array1
ArrayUtils.addAll(null, array2)= cloned copy of array2
ArrayUtils.addAll([], [])= []

4.2 复制/包含/长度/hashcode

clone(boolean[] array) 复制数组并返回 结果数组为空将返回空

contains(boolean[] array, boolean valueToFind) 检查该数据在该数组中是否存在,返回一个boolean值

getLength(Object array) 返回该数组长度

ArrayUtils.getLength(null)= 0
ArrayUtils.getLength([])= 0
ArrayUtils.getLength([null])= 1
ArrayUtils.getLength([true, false])= 2
ArrayUtils.getLength([1, 2, 3])= 3
ArrayUtils.getLength(["a", "b", "c"]) = 3

hashCode(Object array) 返回该数组的哈希Code码

4.3 查询/插入

indexOf(boolean[] array, boolean valueToFind) 从数组的第一位开始查询该数组中是否有指定的数值,存在返回index的数值,否则返回-1

indexOf(boolean[] array, boolean valueToFind, int startIndex) 从数组的第startIndex位开始查询该数组中是否有指定的数值,存在返回index的数值,否则返回-1

insert(int index, boolean[] array, boolean... values) 向指定的位置往该数组添加指定的元素,返回一个新的数组

ArrayUtils.insert(index, null, null)= null
ArrayUtils.insert(index, array, null)= cloned copy of 'array'
ArrayUtils.insert(index, null, values)= null

lastIndexOf(boolean[] array, boolean valueToFind) 从数组的最后一位开始往前查询该数组中是否有指定的数值,存在返回index的数值,否则返回-1

lastIndexOf(boolean[] array, boolean valueToFind, int startIndex) 从数组的最后startIndex位开始往前查询该数组中是否有指定的数值,存在返回index的数值,否则返回-1

4.4 判断

isEmpty(boolean[] array) 判断该数组是否为空,返回一个boolean值

isNotEmpty(boolean[] array) 判断该数组是否为空,而不是null

isSameLength(boolean[] array1, boolean[] array2) 判断两个数组的长度是否一样,当数组为空视长度为0。返回一个boolean值

isSameType(Object array1, Object array2) 判断两个数组的类型是否一样,返回一个boolean值

isSorted(boolean[] array) 判断该数组是否按照自然排列顺序排序,返回一个boolean值

isSorted(T[] array, Comparator comparator) 判断该数组是否按照比较器排列顺序排序,返回一个boolean值

nullToEmpty(boolean[] array) 将null转换为空的数组,如果数组不为null,返回原数组,如果数组为null,返回一个空的数组

4.5 删除

remove(boolean[] array, int index) 删除该数组指定位置上的元素,返回一个新的数组,所有后续元素左移(下标减1)

ArrayUtils.remove([true], 0)= []
ArrayUtils.remove([true, false], 0)= [false]
ArrayUtils.remove([true, false], 1)= [true]
ArrayUtils.remove([true, true, false], 1) = [true, false]

removeAll(boolean[] array, int... indices) 删除该数组多个指定位置上的元素,返回一个新的数组,所有后续元素左移(下标减1)

ArrayUtils.removeAll([true, false, true], 0, 2) = [false]
ArrayUtils.removeAll([true, false, true], 1, 2) = [true]

removeAllOccurences(boolean[] array, boolean element) 从该数组中删除指定的元素,返回一个新的数组

removeElement(boolean[] array, boolean element) 从该数组中删除指定的元素,返回一个新的数组

removeElements(boolean[] array, boolean... values) 从该数组中删除指定数量的元素,返回一个新的数组

ArrayUtils.removeElements(null, true, false)=null
ArrayUtils.removeElements([], true, false)= []
ArrayUtils.removeElements([true], false, false)= [true]
ArrayUtils.removeElements([true, false], true, true)= [false]
ArrayUtils.removeElements([true, false, true], true)= [false, true]
ArrayUtils.removeElements([true, false, true], true, true) = [false]

4.6 反转/截取/交换

reverse(boolean[] array) 数组反转

reverse(boolean[] array, int startIndexInclusive, int endIndexExclusive) 数组从指定位置区间进行反转

shuffle(boolean[] array) 把数组中的元素按随机顺序重新排列

subarray(boolean[] array, int startIndexInclusive, int endIndexExclusive) 截取数组,按指定位置区间截取并返回一个新的数组

swap(boolean[] array, int offset1, int offset2) 指定该数组的两个位置的元素交换进行交换

ArrayUtils.swap([1, 2, 3], 0, 2) -> [3, 2, 1]
ArrayUtils.swap([1, 2, 3], 0, 0) -> [1, 2, 3]
ArrayUtils.swap([1, 2, 3], 1, 0) -> [2, 1, 3]
ArrayUtils.swap([1, 2, 3], 0, 5) -> [1, 2, 3]
ArrayUtils.swap([1, 2, 3], -1, 1) -> [2, 1, 3]

4.7 数组与其他类型的转换

toArray(T... items) 创建数组

String[] array = ArrayUtils.toArray("1", "2");
String[] emptyArray = ArrayUtils.<String>toArray();

toMap(Object[] array) 将二维数组转换成Map并返会

MapMap colorMap = ArrayUtils.toMap(new String[][] {
    {"RED", "#FF0000"},
    {"GREEN", "#00FF00"},
    {"BLUE", "#0000FF"}
});

toObject(boolean[] array) 将基本类型数组转换成对象类型数组并返回

toPrimitive(Boolean[] array) 将对象类型数组转换成基本类型数组并返回

toString(Object array) 将数组转换为string字符串并返回

toStringArray(Object[] array) 将Object数组转换为String数组类型

5 BooleanUtils 布尔工具类

5.1 逻辑与/或/非/异或

and(boolean... array) 逻辑与

BooleanUtils.and(true, true)         = true
BooleanUtils.and(false, false)       = false
BooleanUtils.and(true, false)        = false
BooleanUtils.and(true, true, false)  = false
BooleanUtils.and(true, true, true)   = true

compare(boolean x, boolean y) 比较两个布尔值并返回int类型,如果x == y返回0,!x && y 返回小于 0 ,x && !y 返回大于0

isFalse(Boolean bool) 是否是假并返回boolean

isTrue(Boolean bool) 是否是真并返回boolean

negate(Boolean bool) 逻辑非

BooleanUtils.negate(Boolean.TRUE)  = Boolean.FALSE;
BooleanUtils.negate(Boolean.FALSE) = Boolean.TRUE;
BooleanUtils.negate(null)          = null;

or(boolean... array) 逻辑或

BooleanUtils.or(true, true)          = true
BooleanUtils.or(false, false)        = false
BooleanUtils.or(true, false)         = true
BooleanUtils.or(true, true, false)   = true
BooleanUtils.or(true, true, true)    = true
BooleanUtils.or(false, false, false) = false

xor(boolean... array) 异或

BooleanUtils.xor(true, true)   = false
BooleanUtils.xor(false, false) = false
BooleanUtils.xor(true, false)  = true

5.2 队形类型与其他类型的转换

toBoolean(Boolean bool) 将对象类型转换为基本数据类型并返回

BooleanUtils.toBoolean(Boolean.TRUE)  = true
BooleanUtils.toBoolean(Boolean.FALSE) = false
BooleanUtils.toBoolean(null)          = false

toBoolean(int value) 将int类型转换为boolean类型并返回

BooleanUtils.toBoolean(0) = false
BooleanUtils.toBoolean(1) = true
BooleanUtils.toBoolean(2) = true

toBoolean(String str) 将string类型转换为boolean类型并返回

BooleanUtils.toBoolean(null)    = false
BooleanUtils.toBoolean("true")  = true
BooleanUtils.toBoolean("TRUE")  = true
BooleanUtils.toBoolean("tRUe")  = true
BooleanUtils.toBoolean("on")    = true
BooleanUtils.toBoolean("yes")   = true
BooleanUtils.toBoolean("false") = false
BooleanUtils.toBoolean("x gti") = false
BooleanUtils.toBooleanObject("y") = true
BooleanUtils.toBooleanObject("n") = false
BooleanUtils.toBooleanObject("t") = true
BooleanUtils.toBooleanObject("f") = false

toInteger(boolean bool) 将boolean类型数据转换为int类型并返回

BooleanUtils.toInteger(true)  = 1
BooleanUtils.toInteger(false) = 0

toStringOnOff(boolean bool) 将boolean类型数据转换为String类型'on' or 'off'并返回

BooleanUtils.toStringOnOff(true)   = "on"
BooleanUtils.toStringOnOff(false)  = "off"

toStringTrueFalse(Boolean bool) 将boolean类型数据转换为String类型''true' or 'false'并返回

BooleanUtils.toStringTrueFalse(true)   = "true"
BooleanUtils.toStringTrueFalse(false)  = "false"

toStringYesNo(boolean bool) 将boolean类型数据转换为String类型'yes' or 'no'并返回

BooleanUtils.toStringYesNo(true)   = "yes"
BooleanUtils.toStringYesNo(false)  = "no"

6 ClassPathUtils class路径工具

返回一个由class包名+resourceName拼接的字符串有如下几种方式:

1.toFullyQualifiedName(Class<?> context, String resourceName)

ClassPathUtils.toFullyQualifiedName(StringUtils.class, "StringUtils.properties") = "org.apache.commons.lang3.StringUtils.properties"

2.toFullyQualifiedName(Package context, String resourceName)

ClassPathUtils.toFullyQualifiedName(StringUtils.class.getPackage(), "StringUtils.properties") = "org.apache.commons.lang3.StringUtils.properties"

3.toFullyQualifiedPath(Class<?> context, String resourceName)

ClassPathUtils.toFullyQualifiedPath(StringUtils.class, "StringUtils.properties") = "org/apache/commons/lang3/StringUtils.properties"

4.toFullyQualifiedPath(Package context, String resourceName)

ClassPathUtils.toFullyQualifiedPath(StringUtils.class, "StringUtils.properties") = "org/apache/commons/lang3/StringUtils.properties"

7 EnumUtils 枚举工具类

getEnum(Class enumClass, String enumName) 通过类返回一个枚举,可能返回空

getEnumList(Class enumClass) 通过类返回一个枚举集合

getEnumMap(Class enumClass) 通过类返回一个枚举map

isValidEnum(Class enumClass, String enumName) 验证enumName是否在枚举中,返回true false

枚举类
public enum EnumDemo {
    AA("1"), BB("2");
    private String value;

    EnumDemo(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}

测试
EnumDemo enumDemo = EnumUtils.getEnum(EnumDemo.class, "");
System.out.println(enumDemo);
System.out.println("-----");

List<EnumDemo> list = EnumUtils.getEnumList(EnumDemo.class);
for (EnumDemo a : list) {
    System.out.println(a + ":" + a.getValue());
}
System.out.println("-----");

Map<String, EnumDemo> enumMap = EnumUtils.

8 ObjectUtils Object工具类

allNotNull(Object... values) 检查所有元素是否为空,返回一个boolean

如果有一个元素为空返回false,所有元素不为空或元素为empty返回true
ObjectUtils.allNotNull(*)             = true
ObjectUtils.allNotNull(*, *)          = true
ObjectUtils.allNotNull(null)          = false
ObjectUtils.allNotNull(null, null)    = false
ObjectUtils.allNotNull(null, *)       = false
ObjectUtils.allNotNull(*, null)       = false
ObjectUtils.allNotNull(*, *, null, *) = false

anyNotNull(Object... values) 检查元素是否为空,返回一个boolean

如果有一个元素不为空返回true
ObjectUtils.anyNotNull(*)                = true
ObjectUtils.anyNotNull(*, null)          = true
ObjectUtils.anyNotNull(null, *)          = true
ObjectUtils.anyNotNull(null, null, *, *) = true
ObjectUtils.anyNotNull(null)             = false
ObjectUtils.anyNotNull(null, null)       = false

clone(T obj) 拷贝一个对象并返回

compare(T c1, T c2) 比较两个对象,返回一个int值

defaultIfNull(T object, T defaultValue) 如果对象为空返回一个默认值

firstNonNull(T... values) 返回数组中第一个不为空的值

notEqual(Object object1, Object object2) 判断两个对象不相等,返回一个boolean

9 RandomUtils 随机工具类

nextBoolean() 返回一个随机boolean值

nextBytes(int count) 返回一个指定大小的随机byte数组

nextDouble() 返回一个随机double值

nextDouble(double startInclusive, double endInclusive) 返回一个指定范围的随机double值

nextFloat() 返回一个随机float值

nextFloat(float startInclusive, float endInclusive) 返回一个指定范围的随机float值

nextInt() 返回一个随机int值

nextInt(int startInclusive, int endExclusive) 返回一个指定范围的随机int值

nextLong() 返回一个随机long值

nextLong(long startInclusive, long endExclusive) 返回一个指定范围的随机long值

10 SystemUtils 操作系统工具类

FILE_ENCODING 返回系统编码

IS_JAVA_1_1、...、IS_JAVA_1_8、IS_JAVA_10、IS_JAVA_9 判断java版本,返回一个boolean

IS_OS_LINUX 判断系统是否是linux,返回一个boolean

IS_OS_MAC 判断系统是否是mac,返回一个boolean

IS_OS_WINDOWS、IS_OS_WINDOWS_10、 IS_OS_WINDOWS_2000、IS_OS_WINDOWS_2003、IS_OS_WINDOWS_2008、IS_OS_WINDOWS_7、 IS_OS_WINDOWS_8、 IS_OS_WINDOWS_95、 IS_OS_WINDOWS_98、 IS_OS_WINDOWS_XP 判断系统是否是windows,返回一个boolean

JAVA_CLASS_PATH 返回系统CLASS_PATH值

JAVA_CLASS_VERSION 返回系统java版本

JAVA_HOME 返回系统java home

JAVA_RUNTIME_VERSION 返回java运行版本

JAVA_VERSION 返回java版本

OS_NAME 返回系统名

OS_VERSION 返回系统版本

USER_COUNTRY 返回用户国家编号

USER_DIR 返回项目文件夹

USER_HOME 返回系统用户主文件夹

USER_LANGUAGE 返回系统用户语言

USER_NAME 返回系统用户名

11 StringUtils 字符串工具类

11.1 返回指定长度字符串

abbreviate(String str, int maxWidth) 返回一个指定长度加省略号的字符串,maxWidth必须大于3

StringUtils.abbreviate(null, *)      = null
StringUtils.abbreviate("", 4)        = ""
StringUtils.abbreviate("abcdefg", 6) = "abc..."
StringUtils.abbreviate("abcdefg", 7) = "abcdefg"
StringUtils.abbreviate("abcdefg", 8) = "abcdefg"
StringUtils.abbreviate("abcdefg", 4) = "a..."
StringUtils.abbreviate("abcdefg", 3) = IllegalArgumentException

abbreviate(String str, int offset, int maxWidth) 返回一个指定长度加省略号的字符串,maxWidth必须大于3

abbreviate(String str, String abbrevMarker, int maxWidth) 返回一个自定义省略号的指定长度字符串,maxWidth必须大于3

StringUtils.abbreviate(null, "...", *)      = null
StringUtils.abbreviate("abcdefg", null, *)  = "abcdefg"
StringUtils.abbreviate("", "...", 4)        = ""
StringUtils.abbreviate("abcdefg", ".", 5)   = "abcd."
StringUtils.abbreviate("abcdefg", ".", 7)   = "abcdefg"
StringUtils.abbreviate("abcdefg", ".", 8)   = "abcdefg"
StringUtils.abbreviate("abcdefg", "..", 4)  = "ab.."
StringUtils.abbreviate("abcdefg", "..", 3)  = "a.."
StringUtils.abbreviate("abcdefg", "..", 2)  = IllegalArgumentException
StringUtils.abbreviate("abcdefg", "...", 3) = IllegalArgumentException

abbreviateMiddle(String str, String abbrevMarker, int maxWidth) 将字符串缩短到指定长度(length),字符串的中间部分用替换字符串(middle)显示

StringUtils.abbreviateMiddle("abc", null, 0)      = "abc"
StringUtils.abbreviateMiddle("abc", ".", 0)      = "abc"
StringUtils.abbreviateMiddle("abc", ".", 3)      = "abc"
StringUtils.abbreviateMiddle("abcdef", ".", 4)     = "ab.f"

11.2 删除字符

chomp(String str) 删除字符串末尾的一个换行符,返回一个新的字符串(换行符"n", "r", or "rn")

StringUtils.chomp(null)          = null
StringUtils.chomp("")            = ""
StringUtils.chomp("abc \r")      = "abc "
StringUtils.chomp("abc\n")       = "abc"
StringUtils.chomp("abc\r\n")     = "abc"
StringUtils.chomp("abc\r\n\r\n") = "abc\r\n"
StringUtils.chomp("abc\n\r")     = "abc\n"
StringUtils.chomp("abc\n\rabc")  = "abc\n\rabc"
StringUtils.chomp("\r")          = ""
StringUtils.chomp("\n")          = ""
StringUtils.chomp("\r\n")        = ""

chop(String str) 删除字符串末尾的一个字符,返回一个新的字符串

StringUtils.chop(null)          = null
StringUtils.chop("")            = ""
StringUtils.chop("abc \r")      = "abc "
StringUtils.chop("abc\n")       = "abc"
StringUtils.chop("abc\r\n")     = "abc"
StringUtils.chop("abc")         = "ab"
StringUtils.chop("abc\nabc")    = "abc\nab"
StringUtils.chop("a")           = ""
StringUtils.chop("\r")          = ""
StringUtils.chop("\n")          = ""
StringUtils.chop("\r\n")        = ""

deleteWhitespace(String str) 删除字符串中的空格字符,并返回新的字符串

StringUtils.deleteWhitespace(null)         = null
StringUtils.deleteWhitespace("")           = ""
StringUtils.deleteWhitespace("abc")        = "abc"
StringUtils.deleteWhitespace("   ab  c  ") = "abc"

发布于 2018-09-30 17:35