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

 

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