Apache Commons Lang3 基本工具库、含各种常用工具

目录

Commons Lang3 概述

Commons lang3 常用工具类

StringUtils 工具类方法汇总

RandomUtils 工具类方法汇总

RandomStringUtils 随机字符串

ObjectUtils 对象工具类

NumberUtils 数值工具类


Commons Lang3 概述

1、标准 java 库无法提供足够的方法来操作其核心类,apache commons lang 子项目提供了这些额外的方法。特别是字符串操作方法、基本数值方法、对象反射、并发、创建和序列化以及系统属性。经理再也不用担心空指针异常。此外 lang 还还包含对 java.util.date 的基本增强,以及一系列专门用于帮助构建方法的实用程序,如 hasHcode、toString 和 equals。

2、lang3.0(及其后续版本)使用的包(org.apache.commons.lang3)与以前的版本(org.apache.commons.lang)不同,允许它与以前的版本同时使用。

3、Apache Commons Lang3 子项目官网地址:http://commons.apache.org/proper/commons-lang/

4、Apache Commons Lang3 二进制包下载地址:http://commons.apache.org/proper/commons-lang/download_lang.cgi

5、Apache Commons Lang3 Maven 依赖:

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.9</version>
</dependency>

6、Apache Commons Lang 3.9 API 文档:http://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html

Commons lang3 常用工具类

工具类 描述 示例
org.apache.commons.lang3.ObjectUtils 对象工具类 ObjectUtils.isNotEmpty(new int[]{}) = false
org.apache.commons.lang3.math.NumberUtils 数值工具类

NumberUtils.toInt(null) = 0,

NumberUtils.toInt("1") = 1

org.apache.commons.lang3.ArrayUtils 数组工具类 ArrayUtils.remove([1, 0], 1) = [1]
org.apache.commons.lang3.BooleanUtils 布尔工具类

BooleanUtils.toInteger(true) = 1,

BooleanUtils.toBoolean(1) = Boolean.TRUE

org.apache.commons.lang3.RandomStringUtils 随机字符串工具类

RandomStringUtils.randomAlphabetic(10) = "CtDdCZEldF",

RandomStringUtils.randomGraph(10) = #vdP\eCl@F

org.apache.commons.lang3.RandomUtils 随机数值工具类

RandomUtils.nextBoolean(),

RandomUtils.nextInt(100,1000)

org.apache.commons.lang3.SystemUtils 系统工具类 SystemUtils.getUserHome() = "C:\Users\Think"
org.apache.commons.lang3.time.DateFormatUtils 日期格式化工具类,将日期转为指定格式的字符串 DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:dd") = "2019-11-11 11:11:11"
org.apache.commons.lang3.time.DateUtils 日期工具类,将指定格式的字符串转为日期 DateUtils.parseDate("1993-09-08 14:30:08","yyyy-MM-dd HH:mm:dd")

StringUtils 工具类方法汇总

如下所有都是静态方法,可以直接调用,更多详细内容,参考官网

方法

描述/举例

//判断目标字符串为空或者为null,空格也当作为空

isBlank(CharSequence cs)

StringUtils.isBlank(" ")   = true
StringUtils.isBlank("bob")    = false
StringUtils.isBlank("  bob  ") = false

StringUtils.isBlank(null)  = true
StringUtils.isBlank("")    = true

判断目标字符串不为空且不为null,空格也当作为空

isNotBlank(CharSequence cs)

StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("")    = false

StringUtils.isNotBlank(" ")   = false
StringUtils.isNotBlank("bob")     = true
StringUtils.isNotBlank("  bob  ")  = true

判断目标字符串为空或者为null,空格不当作为空

isEmpty(CharSequence cs)

StringUtils.isEmpty(null) = true
StringUtils.isEmpty("")    = true

StringUtils.isEmpty(" ")   = false
StringUtils.isEmpty("bob")     = false
StringUtils.isEmpty("  bob  ")  = false

判断目标字符串不为空且不为null,空格不当作为空

isNotEmpty(CharSequence cs)

StringUtils.isNotEmpty(null)  = false
StringUtils.isNotEmpty("")    = false

StringUtils.isNotEmpty(" ")  = true
StringUtils.isNotEmpty("bob")   = true
StringUtils.isNotEmpty("  bob  ") = true

判断字符串是否是数字,不忽略空格

isNumeric(CharSequence cs)

StringUtils.isNumeric(null)   = false
StringUtils.isNumeric("")     = false
StringUtils.isNumeric("  ")   = false
StringUtils.isNumeric("123")  = true
StringUtils.isNumeric("\u0967\u0968\u0969")  = true

StringUtils.isNumeric("12 3") = false
StringUtils.isNumeric("ab2c") = false
StringUtils.isNumeric("12-3") = false
StringUtils.isNumeric("12.3") = false
StringUtils.isNumeric("-123") = false
StringUtils.isNumeric("+123") = false

判断字符串是否是数字,忽略空格

isNumericSpace(CharSequence cs)

StringUtils.isNumericSpace(null)   = false
StringUtils.isNumericSpace("")     = true
StringUtils.isNumericSpace("  ")   = true
StringUtils.isNumericSpace("123")  = true
StringUtils.isNumericSpace("12 3") = true
StringUtils.isNumeric("\u0967\u0968\u0969")  = true

StringUtils.isNumeric("\u0967\u0968 \u0969")  = true
StringUtils.isNumericSpace("ab2c") = false
StringUtils.isNumericSpace("12-3") = false
StringUtils.isNumericSpace("12.3") = false

判断字符串是否是希腊字母,不忽略空格

isAlpha(CharSequence cs)

StringUtils.isAlpha(null)   = false
StringUtils.isAlpha("")     = false
StringUtils.isAlpha("  ")   = false

StringUtils.isAlpha("abc")  = true
StringUtils.isAlpha("ab2c") = false
StringUtils.isAlpha("ab-c") = false

判断字符串是否是希腊字母,忽略空格

isAlphaSpace(CharSequence cs)

StringUtils.isAlphaSpace(null)   = false
StringUtils.isAlphaSpace("")     = true
StringUtils.isAlphaSpace("  ")   = true

StringUtils.isAlphaSpace("abc")  = true
StringUtils.isAlphaSpace("ab c") = true
StringUtils.isAlphaSpace("ab2c") = false
StringUtils.isAlphaSpace("ab-c") = false
isAlphanumeric(CharSequence cs)
isAlphanumericSpace(CharSequence cs)

判断字符串是否是希腊字母与数字组成,不忽略空格 与 忽略空格
StringUtils.isAlphanumeric("ab c") = false
StringUtils.isAlphanumericSpace("ab c") = true

判断字符串是否全是小写字母

isAllLowerCase(CharSequence cs)

StringUtils.isAllLowerCase(null)   = false
StringUtils.isAllLowerCase("")     = false
StringUtils.isAllLowerCase("  ")   = false
StringUtils.isAllLowerCase("abc")  = true

StringUtils.isAllLowerCase("abC")  = false
StringUtils.isAllLowerCase("ab c") = false
StringUtils.isAllLowerCase("ab1c") = false
StringUtils.isAllLowerCase("ab/c") = false

判断字符串是否全大写字母

isAllUpperCase(CharSequence cs)

StringUtils.isAllUpperCase(null)   = false
StringUtils.isAllUpperCase("")     = false
StringUtils.isAllUpperCase("  ")   = false
StringUtils.isAllUpperCase("ABC")  = true

StringUtils.isAllUpperCase("aBC")  = false
StringUtils.isAllUpperCase("A C")  = false
StringUtils.isAllUpperCase("A1C")  = false
StringUtils.isAllUpperCase("A/C")  = false

判断源字符串 seq 是否包含字符串 searchSeq。区分大小写

contains(CharSequence seq, CharSequence searchSeq)

StringUtils.contains(null, *)     = false
StringUtils.contains(*, null)     = false
StringUtils.contains("", "")      = true

StringUtils.contains("abc", "")   = true
StringUtils.contains("abc", "a")  = true
StringUtils.contains("abc", "z")  = false

判断源字符串 seq 是否包含字符 searchChar。区分大小写

contains(CharSequence seq, int searchChar)

StringUtils.contains(null, *)    = false
StringUtils.contains("", *)      = false

StringUtils.contains("abc", 'a') = true
StringUtils.contains("abc", 'z') = false

判断源字符串 seq 是否包含字符串 searchChars。不区分大小写

containsAny(CharSequence cs, CharSequence searchChars)

StringUtils.containsAny(null, *) = false
StringUtils.containsAny("", *)  = false
StringUtils.containsAny(*, null) = false
StringUtils.containsAny(*, "")  = false
StringUtils.containsAny("zzabyycdxx", "za")    = true

StringUtils.containsAny("zzabyycdxx", "by")    = true

StringUtils.containsAny("zzabyycdxx", "zy")    = true
StringUtils.containsAny("zzabyycdxx", "\tx")   = true
StringUtils.containsAny("zzabyycdxx", "$.#yF") = true
StringUtils.containsAny("aba", "z")            = false

searchCharSequences 数组中主要有任意一个匹配上就返回 true

containsAny(CharSequence cs, CharSequence... searchCharSequences)

StringUtils.containsAny(null, *) = false
StringUtils.containsAny("", *) = false
StringUtils.containsAny(*, null) = false
StringUtils.containsAny(*, [])              = false

StringUtils.containsAny("abcd", "ab", null) = true
StringUtils.containsAny("abcd", "ab", "cd") = true
StringUtils.containsAny("abc", "d", "abc")  = true

去掉字符串前后空格。为空时返回空,为 null 时返回 null(不是字符串null,防止空指针异常)

trim(String str)

StringUtils.trim(null)   = null
StringUtils.trim("")  = ""
StringUtils.trim("     ")       = ""

StringUtils.trim("abc")         = "abc"
StringUtils.trim("    abc    ") = "abc"

去掉字符串前后空格。当为空时,返回 null(不是字符串null,防止空指针异常)

trimToNull(String str)

StringUtils.trimToNull(null)          = null
StringUtils.trimToNull("")            = null
StringUtils.trimToNull("     ")       = null

StringUtils.trimToNull("abc")         = "abc"
StringUtils.trimToNull("    abc    ") = "abc"

去掉字符串前后空格。当为 null 时,返回空

trimToEmpty(String str)


StringUtils.trimToEmpty(null)          = ""
StringUtils.trimToEmpty("")            = ""
StringUtils.trimToEmpty("     ")       = ""

StringUtils.trimToEmpty("abc")         = "abc"
StringUtils.trimToEmpty("    abc    ") = "abc"

比较两个字符串是否相等,区分大小写

equals(CharSequence cs1, CharSequence cs2)

StringUtils.equals(null, null)   = true
StringUtils.equals(null, "abc")  = false

StringUtils.equals("abc", null)  = false
StringUtils.equals("abc", "abc") = true
StringUtils.equals("abc", "ABC") = false

比较两个字符串是否相等,不区分大小写

equalsIgnoreCase(CharSequence cs1, CharSequence cs2)

StringUtils.equalsIgnoreCase(null, null) = true
StringUtils.equalsIgnoreCase(null, "abc") = false

StringUtils.equalsIgnoreCase("abc", null)  = false
StringUtils.equalsIgnoreCase("abc", "abc") = true
StringUtils.equalsIgnoreCase("abc", "ABC") = true

查找 seq 中 searchSeq 第一次出现的索引位置,找不到返回 -1,区分大小写。

indexOf(CharSequence seq, CharSequence searchSeq)

StringUtils.indexOf(null, *)          = -1
StringUtils.indexOf(*, null)          = -1
StringUtils.indexOf("", "")           = 0

StringUtils.indexOf("", *)     = -1 (except when = "")
StringUtils.indexOf("aabaabaa", "a")  = 0
StringUtils.indexOf("aabaabaa", "b")  = 2
StringUtils.indexOf("aabaabaa", "ab") = 1
StringUtils.indexOf("aabaabaa", "")   =0

从指定位置开始查找

indexOf(final CharSequence seq, final CharSequence searchSeq, final int startPos)

StringUtils.indexOf(null, *, *) = -1
StringUtils.indexOf(*, null, *) = -1
StringUtils.indexOf("", "", 0) = 0
StringUtils.indexOf("", *, 0) = -1
StringUtils.indexOf("aabaabaa", "a", 0)  = 0
StringUtils.indexOf("aabaabaa", "b", 0)  = 2

StringUtils.indexOf("aabaabaa", "ab", 0) = 1
StringUtils.indexOf("aabaabaa", "b", 3)  = 5
StringUtils.indexOf("aabaabaa", "b", 9)  = -1
StringUtils.indexOf("aabaabaa", "b", -1) = 2
StringUtils.indexOf("aabaabaa", "", 2)   = 2
StringUtils.indexOf("abc", "", 9)        = 3

查找数组中任意元素在源字符串中出现的索引位置,满足多个时,取最小值

indexOfAny(final CharSequence str, final CharSequence... searchStrs)

StringUtils.indexOfAny(null, *) = -1
StringUtils.indexOfAny(*, null) = -1
StringUtils.indexOfAny(*, []) = -1
StringUtils.indexOfAny("zzabyycdxx", ["ab", "cd"]) = 2
StringUtils.indexOfAny("zzabyycdxx", ["cd", "ab"])   = 2

StringUtils.indexOfAny("zzabyycdxx", ["mn", "op"]) = -1
StringUtils.indexOfAny("zzabyycdxx", ["zab", "aby"])=1
StringUtils.indexOfAny("zzabyycdxx", [""]) = 0
StringUtils.indexOfAny("", [""])   = 0
StringUtils.indexOfAny("", ["a"]) = -1

字符字母转小写

lowerCase(final String str)

StringUtils.lowerCase(null)  = null
StringUtils.lowerCase("")    = ""
StringUtils.lowerCase("aBc") = "abc"

字符串字母转大写

upperCase(final String str)

StringUtils.upperCase(null)  = null

StringUtils.upperCase("")    = ""
StringUtils.upperCase("aBc") = "ABC"

对 str 字符串进行省略号缩写,maxWidth 表示长度,必须大于等于4

abbreviate(final String str, final int maxWidth)

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

将首字母转大写

capitalize(final String str)

StringUtils.capitalize(null)  = null
StringUtils.capitalize("")    = ""

StringUtils.capitalize("cat") = "Cat"
StringUtils.capitalize("cAt") = "CAt"
StringUtils.capitalize("'cat'") = "'cat'"

将 str 前后用空格填充,使总长度达到 size。size 本身小于 str 长度时,不做填充

center(final String str, final int size)

StringUtils.center(null, *)   = null
StringUtils.center("", 4)     = "    "
StringUtils.center("ab", -1)  = "ab"

StringUtils.center("ab", 4)   = " ab "
StringUtils.center("abcd", 2) = "abcd"
StringUtils.center("a", 4)    = " a  "

使用指定字符串进行填充

center(String str, final int size, String padStr)

StringUtils.center(null, *, *)     = null
StringUtils.center("", 4, ' ')     = "    "
StringUtils.center("ab", -1, ' ')  = "ab"

StringUtils.center("ab", 4, ' ')   = " ab "
StringUtils.center("abcd", 2, ' ') = "abcd"
StringUtils.center("a", 4, ' ')    = " a  "
StringUtils.center("a", 4, 'y')    = "yayy"

比较字符串 str1 与  str2 的大小。不忽略大小写 与 忽略大小写

compare(final String str1, final String str2)

compareIgnoreCase(final String str1, final String str2)

StringUtils.compare(null, null)   = 0
StringUtils.compare(null , "a")   = -1
StringUtils.compare("a", null)    = 1
StringUtils.compare("abc", "abc") = 0

StringUtils.compare("a", "b")     = -1
StringUtils.compare("b", "a")     = 1
StringUtils.compare("a", "B")     = 31
StringUtils.compare("ab", "abc")  = -1

查找字符串中某个字符或字符串出现的次数

countMatches(final CharSequence str, final CharSequence sub)

StringUtils.countMatches(null, *)       = 0
StringUtils.countMatches("", *)         = 0
StringUtils.countMatches("abba", null)  = 0
StringUtils.countMatches("abba", "")    = 0

StringUtils.countMatches("abba", "a")   = 2
StringUtils.countMatches("abba", "ab")  = 1
StringUtils.countMatches("abba", "xxx") = 0

将数组 array 使用分隔符 separator 连接成字符串

String join(final Object[] array, final String separator)


StringUtils.join(null, *) = null
StringUtils.join([], *)   = ""
StringUtils.join([null], *)  = ""

StringUtils.join(["a", "b", "c"], "--")  = "a--b--c"
StringUtils.join(["a", "b", "c"], null)  = "abc"
StringUtils.join(["a", "b", "c"], "")    = "abc"
StringUtils.join([null, "", "a"], ',')   = ",,a"

将 Iterable 、Iterator 类型使用连接符连接

String join(final Iterable<?> iterable, final String separator)

String join(final Iterator<?> iterator, final String separator)

List<String> list = new ArrayList<String>();
list.add("唐");
list.add("宋");
list.add("元");
System.out.println(StringUtils.join(list,","));//唐,宋,元

StringUtils.join(Arrays.asList(new String[]{null, "", "a"}), ';') = ;;a

T defaultIfBlank(final T str, final T defaultStr)
当目标字符串(str)为空,或者为 null,或者是空格,则返回默认字符串(defaultStr)
StringUtils.defaultIfBlank(null, "NULL")  = "NULL"
StringUtils.defaultIfBlank("", "NULL")    = "NULL"
StringUtils.defaultIfBlank(" ", "NULL")   = "NULL"
StringUtils.defaultIfBlank("bat", "NULL") = "bat"
StringUtils.defaultIfBlank("", null)      = null
T defaultIfEmpty(final T str, final T defaultStr)
当目标字符串(str)为空,或者为 null,则返回默认字符串(defaultStr)
StringUtils.defaultIfEmpty(null, "NULL")  = "NULL"
StringUtils.defaultIfEmpty("", "NULL")    = "NULL"
StringUtils.defaultIfEmpty(" ", "NULL")   = " "
StringUtils.defaultIfEmpty("bat", "NULL") = "bat"
StringUtils.defaultIfEmpty("", null)      = null

RandomUtils 工具类方法汇总

底层也是使用 java.util.Random。

方法 描述
static int nextInt() 生成 [0, Integer.MAX_VALUE) 之间的随机 int 值
static int nextInt(final int startInclusive, final int endExclusive) 生成 [startInclusive,endExclusive) 之间的随机整数,起始值不能小于终止值。
static boolean nextBoolean() 随机生成一个布尔值,true 或者 false
static long nextLong() 生成 [0, Long.MAX_VALUE) 之间的 long 值
long nextLong(final long startInclusive, final long endExclusive) 生成 [startInclusive,endExclusive) 之间的随机 long 值
static byte[] nextBytes(final int count) 生成指定个数的字节数组,如 nextBytes(10) 生成的字节数组有 10 个 byte 元素  
static double nextDouble() 生成 [0, Double.MAX_VALUE) 直接的随机 double 值
double nextDouble(final double startInclusive, final double endInclusive) 生成 [startInclusive,endExclusive) 之间的随机 double 值
static float nextFloat() 生成 [0, Float.MAX_VALUE) 之间的随机 fluat 值
float nextFloat(final float startInclusive, final float endInclusive) 生成 [startInclusive,endExclusive) 之间的随机 float 值

RandomStringUtils 随机字符串

random(final int count) 创建长度为指定个数(count)的随机字符串,将从所有字符集中选择字符,不含字母和数字,如 "篊𣶇ࢦ𣿎椗彩𩬉𦿣𦃹뢂垅"
random(final int count, final boolean letters, final boolean numbers)

生成指定个数(count)的随机字符串,字符将从参数指示的字母或数字字符集中选择.

1、letters: 字母字符集、numbers:数字字符集
2、letters 为 true、numbers 为 true:则随机字符串由字母和数字组成
3、letters 为 true、numbers 为 false:则随机字符串由字母组成
4、letters 为 false、numbers 为 true:则随机字符串由数字组成,如 7253440222803746
5、letters 为 false、numbers 为 false:则等同于 random(final int count)

random(final int count, final char... chars) 创建长度为指定个数的随机字符串,从指定的字符集(chars)中选择字符. chars 的个数可以小于 count
random(final int count, final String chars): 从指定的字符集中选择字符生成指定个数的随机字符串
randomAlphabetic(final int count) 创建指定长度的随机字符串,字符将从 (a-z, A-Z) 中选择,等同于 random(count, true, false)
randomAlphabetic(final int minLengthInclusive, final int maxLengthExclusive) 创建长度介于 [minLengthInclusive,maxLengthExclusive) 之间的随机字符串
randomAlphanumeric(final int count):创建长度为指定字符数的随机字符串,从拉丁字母字符集(a-z, A-Z)和数字0-9中选择,等同于 random(count, true, true)
randomAlphanumeric(final int minLengthInclusive, final int maxLengthExclusive) 创建长度介于 [minLengthInclusive,maxLengthExclusive) 之间的随机字符串
randomAscii(final int count) 随机字符将从 ASCII 码值介于 [32,126] 之间的字符集中选择,等价于:random(count, 32, 127, false, false)
randomAscii(final int minLengthInclusive, final int maxLengthExclusive) 创建的随机字符串个数介于 [minLengthInclusive,maxLengthExclusive)
randomGraph(final int count) 随机字符从所有可见的 ASCII 字符中选择,即除空格和控制字符外的任何内容,等价于:random(count, 33, 126, false, false)
randomGraph(final int minLengthInclusive, final int maxLengthExclusive) randomNumeric(final int count): 创建长度为指定字符数的随机字符串,随机字符将从数字字符集中选择。
randomNumeric(final int minLengthInclusive, final int maxLengthExclusive) randomPrint(final int count): 随机字符从所有可见的 ASCII 码字符和空格(即除控制字符外的任何内容)中选择。等价于 random(count, 32, 126, false, false)

在线练习源码:/src/main/java/com/wmx/apachestudy/lang/RandomStringTest.java

ObjectUtils 对象工具类

方法 举例

allNotNull(final Object... values)

检查给定数组中的任何元素值是否都不是 null。

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(final Object... values)

检查给定数组中的元素是否有不是 null 的值。

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(final T obj) 克隆对象。如果 obj 为  null,则返回 null.
cloneIfPossible(final T obj): 先调 clone(final T obj) ,如果返回 null,则返回原来的 obj 对象.
compare(final T c1, final T c2)
compare(final T c1, final T c2, final boolean nullGreater)
1、如果 c1 < c2,则返回负数;如果 c1 > c2,则返回正数;如果 c1 = c2,则返回 0;
2、c1、c2 可以为 null。nullGreater 为  false 时,先判断 c1 如果 null ,则返回 -1,再判断 c2 如果为 null,则返回 1.
3、compare(final T c1, final T c2) 底层是 compare(c1, c2, false)

T defaultIfNull(final T object, final T defaultValue)

如果传递的对象是 null,则返回默认值

ObjectUtils.defaultIfNull(null, null)      = null
ObjectUtils.defaultIfNull(null, "")        = ""
ObjectUtils.defaultIfNull(null, "zz")      = "zz"
ObjectUtils.defaultIfNull("abc", *)        = "abc"
ObjectUtils.defaultIfNull(Boolean.TRUE, *) = Boolean.TRUE

firstNonNull(final T... values)

返回数组中不是 null 的第一个值

ObjectUtils.firstNonNull(null, null)      = null
ObjectUtils.firstNonNull(null, "")        = ""
ObjectUtils.firstNonNull(null, null, "")  = ""
ObjectUtils.firstNonNull(null, "zz")      = "zz"
ObjectUtils.firstNonNull("abc", *)        = "abc"
ObjectUtils.firstNonNull(null, "xyz", *)  = "xyz"
ObjectUtils.firstNonNull(Boolean.TRUE, *) = Boolean.TRUE
ObjectUtils.firstNonNull()                = null

isEmpty(final Object object)

检查对象是否为空,支持:CharSequence、Array、Collection、Map

ObjectUtils.isEmpty(null)             = true
ObjectUtils.isEmpty("")               = true
ObjectUtils.isEmpty("ab")             = false
ObjectUtils.isEmpty(new int[]{})      = true
ObjectUtils.isEmpty(new int[]{1,2,3}) = false
ObjectUtils.isEmpty(1234)             = false
isNotEmpty(final Object object) ObjectUtils.isNotEmpty(null)             = false
ObjectUtils.isNotEmpty("")               = false
ObjectUtils.isNotEmpty("ab")             = true
ObjectUtils.isNotEmpty(new int[]{})      = false
ObjectUtils.isNotEmpty(new int[]{1,2,3}) = true
ObjectUtils.isNotEmpty(1234)             = true
max(final T... values):获取其中最大的值
min(final T... values): 获取其中最小的值
median(final T... items):获取其中的中位数

在线练习源码:src/main/java/com/wmx/apachestudy/lang/ObjectUtilsStudy.java

NumberUtils 数值工具类

1、常用常量如下:

Long LONG_ZERO = Long.valueOf(0L);
Long LONG_ONE = Long.valueOf(1L);
Long LONG_MINUS_ONE = Long.valueOf(-1L);
Integer INTEGER_ZERO = Integer.valueOf(0);
Integer INTEGER_ONE = Integer.valueOf(1);
Integer INTEGER_TWO = Integer.valueOf(2);
Integer INTEGER_MINUS_ONE = Integer.valueOf(-1);
Short SHORT_ZERO = Short.valueOf((short) 0);
Short SHORT_ONE = Short.valueOf((short) 1);
Short SHORT_MINUS_ONE = Short.valueOf((short) -1);
Byte BYTE_ZERO = Byte.valueOf((byte) 0);
Byte BYTE_ONE = Byte.valueOf((byte) 1);
Byte BYTE_MINUS_ONE = Byte.valueOf((byte) -1);
Double DOUBLE_ZERO = Double.valueOf(0.0d);
Double DOUBLE_ONE = Double.valueOf(1.0d);
Double DOUBLE_MINUS_ONE = Double.valueOf(-1.0d);
Float FLOAT_ZERO = Float.valueOf(0.0f);
Float FLOAT_ONE = Float.valueOf(1.0f);
Float FLOAT_MINUS_ONE = Float.valueOf(-1.0f);

2、常用方法如下:

int compare(final byte x, final byte y):比较 x、y 的大小,源码: return x - y;
int compare(final int x, final int y): 比较 x、y 的大小,源码:x == y ? 0 : x < y ? -1 : 1
int compare(final long x, final long y): 比较 x、y 的大小,源码:x == y ? 0 : x < y ? -1 : 1
int compare(final short x, final short y) : 比较 x、y 的大小,源码:x == y ? 0 : x < y ? -1 : 1
BigInteger createBigInteger(final String str)
1、将字符串转成 BigInteger,支持 10进制,十六进制(以0X或者#开头)、8进制(以0开头)
2、如果 str 为 null,则返回 null。如果转换错误,则抛出 NumberFormatException
BigDecimal createBigDecimal(final String str)
1、将字符串转成 BigDecimal,只支持 10 进制,底层就是使用 new BigDecimal(str)
2、str 为null时,返回 null,str 为空时会抛出 NumberFormatException 异常
Double createDouble(final String str):字符串转 Double 类型,源码: str == null ? null : Double.valueOf(str);
Float createFloat(final String str):字符串转 Float 类型,源码: str == null ? null : Float.valueOf(str);
Integer createInteger(final String str):1、字符串转 Integer 类型,支持十六进制(0xhhhh)、8进制(0dddd),源码: str == null ? null : Integer.decode(str);
Long createLong(final String str):1、字符串转 Long 类型,支持十六进制(0xhhhh)、8进制(0dddd),源码: str == null ? null : Long.decode(str);
boolean isCreatable(final String str)
1、判断字符串是否为有效的 java 数字,支持16进制、8进制、10进制、正数负数、科学计数法(如8.788006e+05)、类型限定符(110L、3.14f)
2、0X 开头当做 16 进制处理,如 0X89F9;以0开头的非十六进制字符串作为八进制值处理,如 076、-076等
3、注意例如 098 不是八进制,因为8进制是0-7,没有8、9,所以会当做10进制处理,而此时不是数字,所以为false.
4、str 为空或者为 null,都返回 false
boolean isDigits(final String str)
1、检查字符串中是否只含有数字,负数和小数都会返回 false
2、str 为 null 或者为空 返回 false
3、底层调用 {@link StringUtils#isNumeric(java.lang.CharSequence)}
boolean isParsable(final String str)
1、检查字符串是否可以解析为数字,即 {@link Integer#parseInt(String)},{@link Long#parseLong(String)}, {@link Float#parseFloat(String),{@link Double#parseDouble(String)}.
2、这个方法可以防止调用上面的方法时出现  {@link java.text.ParseException}
3、注意只支持 10 进制,支持正负数,不支持 8进制、16进制、不支持科学计数法,也不支持类型限定符(如 3000L,3.14F)

求最大值
byte max(byte a, final byte b, final byte c)

byte max(final byte... array)
double max(final double a, final double b, final double c)
double max(final double... array)
float max(final float a, final float b, final float c)
float max(final float... array)
int max(int a, final int b, final int c)
int max(final int... array)
long max(long a, final long b, final long c)
long max(final long... array)
short max(short a, final short b, final short c)
short max(final short... array)

求最小值
byte min(byte a, final byte b, final byte c)
byte min(final byte... array)
double min(final double a, final double b, final double c)
double min(final double... array)
float min(final float a, final float b, final float c)
float min(final float... array)
int min(int a, final int b, final int c)
int min(final int... array)
long min(long a, final long b, final long c)
long min(final long... array)
short min(short a, final short b, final short c)
short min(final short... array)

byte toByte(final String str):字符串转 byte,如果转换失败,异常捕获后不会抛出,直接返回默认值0;如果 str 为 null,则返回默认值 0
byte toByte(final String str, final byte defaultValue):字符串转 byte,同时设置默认值时,其余和上面同理
<p>

其它数值类型也是同理(转换失败不会抛出异常,而是返回默认值)
double toDouble(final BigDecimal value):
double toDouble(final BigDecimal value, final double defaultValue)
double toDouble(final String str)
double toDouble(final String str, final double defaultValue)
float toFloat(final String str)

其它数值类型也是同理(转换失败不会抛出异常,而是返回默认值)
float toFloat(final String str, final float defaultValue)
int toInt(final String str):
long toLong(final String str):
toInt(final String str, final int defaultValue)
long toLong(final String str, final long defaultValue)
short toShort(final String str)
toShort(final String str, final short defaultValue)

在线源码:https://github.com/wangmaoxiong/apache-study/blob/master/src/main/java/com/wmx/apachestudy/lang/NumberUtilsTest.java

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章