修复CharSequenceUtil注释和引用,避免循环引用

This commit is contained in:
Looly 2023-11-29 10:41:00 +08:00
parent 41e4b3ffb0
commit 824460e5c5
2 changed files with 263 additions and 268 deletions

View File

@ -8,6 +8,7 @@
* 【cache 】 Cache增加get重载可自定义超时时间issue#I8G0DL@Gitee
* 【cache 】 JWT#sign增加重载可选是否增加默认的typ参数issue#3386@Github
* 【db 】 增加识别OpenGauss的驱动类issue#I8K6C0@Gitee
* 【core 】 修复CharSequenceUtil注释和引用避免循环引用
### 🐞Bug修复
* 【core 】 修复LocalDateTime#parseDate未判断空问题问题issue#I8FN7F@Gitee

View File

@ -10,13 +10,7 @@ import cn.hutool.core.lang.func.Func1;
import cn.hutool.core.text.finder.CharFinder;
import cn.hutool.core.text.finder.Finder;
import cn.hutool.core.text.finder.StrFinder;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.DesensitizedUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.*;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
@ -65,10 +59,10 @@ public class CharSequenceUtil {
*
* <p></p>
* <ul>
* <li>{@code StrUtil.isBlank(null) // true}</li>
* <li>{@code StrUtil.isBlank("") // true}</li>
* <li>{@code StrUtil.isBlank(" \t\n") // true}</li>
* <li>{@code StrUtil.isBlank("abc") // false}</li>
* <li>{@code CharSequenceUtil.isBlank(null) // true}</li>
* <li>{@code CharSequenceUtil.isBlank("") // true}</li>
* <li>{@code CharSequenceUtil.isBlank(" \t\n") // true}</li>
* <li>{@code CharSequenceUtil.isBlank("abc") // false}</li>
* </ul>
*
* <p>注意该方法与 {@link #isEmpty(CharSequence)} 的区别是
@ -111,10 +105,10 @@ public class CharSequenceUtil {
*
* <p></p>
* <ul>
* <li>{@code StrUtil.isNotBlank(null) // false}</li>
* <li>{@code StrUtil.isNotBlank("") // false}</li>
* <li>{@code StrUtil.isNotBlank(" \t\n") // false}</li>
* <li>{@code StrUtil.isNotBlank("abc") // true}</li>
* <li>{@code CharSequenceUtil.isNotBlank(null) // false}</li>
* <li>{@code CharSequenceUtil.isNotBlank("") // false}</li>
* <li>{@code CharSequenceUtil.isNotBlank(" \t\n") // false}</li>
* <li>{@code CharSequenceUtil.isNotBlank("abc") // true}</li>
* </ul>
*
* <p>注意该方法与 {@link #isNotEmpty(CharSequence)} 的区别是
@ -136,10 +130,10 @@ public class CharSequenceUtil {
*
* <p></p>
* <ul>
* <li>{@code StrUtil.hasBlank() // true}</li>
* <li>{@code StrUtil.hasBlank("", null, " ") // true}</li>
* <li>{@code StrUtil.hasBlank("123", " ") // true}</li>
* <li>{@code StrUtil.hasBlank("123", "abc") // false}</li>
* <li>{@code CharSequenceUtil.hasBlank() // true}</li>
* <li>{@code CharSequenceUtil.hasBlank("", null, " ") // true}</li>
* <li>{@code CharSequenceUtil.hasBlank("123", " ") // true}</li>
* <li>{@code CharSequenceUtil.hasBlank("123", "abc") // false}</li>
* </ul>
*
* <p>注意该方法与 {@link #isAllBlank(CharSequence...)} 的区别在于</p>
@ -171,10 +165,10 @@ public class CharSequenceUtil {
*
* <p></p>
* <ul>
* <li>{@code StrUtil.isAllBlank() // true}</li>
* <li>{@code StrUtil.isAllBlank("", null, " ") // true}</li>
* <li>{@code StrUtil.isAllBlank("123", " ") // false}</li>
* <li>{@code StrUtil.isAllBlank("123", "abc") // false}</li>
* <li>{@code CharSequenceUtil.isAllBlank() // true}</li>
* <li>{@code CharSequenceUtil.isAllBlank("", null, " ") // true}</li>
* <li>{@code CharSequenceUtil.isAllBlank("123", " ") // false}</li>
* <li>{@code CharSequenceUtil.isAllBlank("123", "abc") // false}</li>
* </ul>
*
* <p>注意该方法与 {@link #hasBlank(CharSequence...)} 的区别在于</p>
@ -208,10 +202,10 @@ public class CharSequenceUtil {
*
* <p></p>
* <ul>
* <li>{@code StrUtil.isEmpty(null) // true}</li>
* <li>{@code StrUtil.isEmpty("") // true}</li>
* <li>{@code StrUtil.isEmpty(" \t\n") // false}</li>
* <li>{@code StrUtil.isEmpty("abc") // false}</li>
* <li>{@code CharSequenceUtil.isEmpty(null) // true}</li>
* <li>{@code CharSequenceUtil.isEmpty("") // true}</li>
* <li>{@code CharSequenceUtil.isEmpty(" \t\n") // false}</li>
* <li>{@code CharSequenceUtil.isEmpty("abc") // false}</li>
* </ul>
*
* <p>注意该方法与 {@link #isBlank(CharSequence)} 的区别是该方法不校验空白字符</p>
@ -238,10 +232,10 @@ public class CharSequenceUtil {
*
* <p></p>
* <ul>
* <li>{@code StrUtil.isNotEmpty(null) // false}</li>
* <li>{@code StrUtil.isNotEmpty("") // false}</li>
* <li>{@code StrUtil.isNotEmpty(" \t\n") // true}</li>
* <li>{@code StrUtil.isNotEmpty("abc") // true}</li>
* <li>{@code CharSequenceUtil.isNotEmpty(null) // false}</li>
* <li>{@code CharSequenceUtil.isNotEmpty("") // false}</li>
* <li>{@code CharSequenceUtil.isNotEmpty(" \t\n") // true}</li>
* <li>{@code CharSequenceUtil.isNotEmpty("abc") // true}</li>
* </ul>
*
* <p>注意该方法与 {@link #isNotBlank(CharSequence)} 的区别是该方法不校验空白字符</p>
@ -350,11 +344,11 @@ public class CharSequenceUtil {
*
* <p></p>
* <ul>
* <li>{@code StrUtil.hasEmpty() // true}</li>
* <li>{@code StrUtil.hasEmpty("", null) // true}</li>
* <li>{@code StrUtil.hasEmpty("123", "") // true}</li>
* <li>{@code StrUtil.hasEmpty("123", "abc") // false}</li>
* <li>{@code StrUtil.hasEmpty(" ", "\t", "\n") // false}</li>
* <li>{@code CharSequenceUtil.hasEmpty() // true}</li>
* <li>{@code CharSequenceUtil.hasEmpty("", null) // true}</li>
* <li>{@code CharSequenceUtil.hasEmpty("123", "") // true}</li>
* <li>{@code CharSequenceUtil.hasEmpty("123", "abc") // false}</li>
* <li>{@code CharSequenceUtil.hasEmpty(" ", "\t", "\n") // false}</li>
* </ul>
*
* <p>注意该方法与 {@link #isAllEmpty(CharSequence...)} 的区别在于</p>
@ -386,11 +380,11 @@ public class CharSequenceUtil {
*
* <p></p>
* <ul>
* <li>{@code StrUtil.isAllEmpty() // true}</li>
* <li>{@code StrUtil.isAllEmpty("", null) // true}</li>
* <li>{@code StrUtil.isAllEmpty("123", "") // false}</li>
* <li>{@code StrUtil.isAllEmpty("123", "abc") // false}</li>
* <li>{@code StrUtil.isAllEmpty(" ", "\t", "\n") // false}</li>
* <li>{@code CharSequenceUtil.isAllEmpty() // true}</li>
* <li>{@code CharSequenceUtil.isAllEmpty("", null) // true}</li>
* <li>{@code CharSequenceUtil.isAllEmpty("123", "") // false}</li>
* <li>{@code CharSequenceUtil.isAllEmpty("123", "abc") // false}</li>
* <li>{@code CharSequenceUtil.isAllEmpty(" ", "\t", "\n") // false}</li>
* </ul>
*
* <p>注意该方法与 {@link #hasEmpty(CharSequence...)} 的区别在于</p>
@ -422,11 +416,11 @@ public class CharSequenceUtil {
*
* <p></p>
* <ul>
* <li>{@code StrUtil.isAllNotEmpty() // false}</li>
* <li>{@code StrUtil.isAllNotEmpty("", null) // false}</li>
* <li>{@code StrUtil.isAllNotEmpty("123", "") // false}</li>
* <li>{@code StrUtil.isAllNotEmpty("123", "abc") // true}</li>
* <li>{@code StrUtil.isAllNotEmpty(" ", "\t", "\n") // true}</li>
* <li>{@code CharSequenceUtil.isAllNotEmpty() // false}</li>
* <li>{@code CharSequenceUtil.isAllNotEmpty("", null) // false}</li>
* <li>{@code CharSequenceUtil.isAllNotEmpty("123", "") // false}</li>
* <li>{@code CharSequenceUtil.isAllNotEmpty("123", "abc") // true}</li>
* <li>{@code CharSequenceUtil.isAllNotEmpty(" ", "\t", "\n") // true}</li>
* </ul>
*
* <p>注意该方法与 {@link #isAllEmpty(CharSequence...)} 的区别在于</p>
@ -534,11 +528,11 @@ public class CharSequenceUtil {
* 除去字符串头尾部的空白如果字符串是{@code null}返回{@code ""}
*
* <pre>
* StrUtil.trimToEmpty(null) = ""
* StrUtil.trimToEmpty("") = ""
* StrUtil.trimToEmpty(" ") = ""
* StrUtil.trimToEmpty("abc") = "abc"
* StrUtil.trimToEmpty(" abc ") = "abc"
* CharSequenceUtil.trimToEmpty(null) = ""
* CharSequenceUtil.trimToEmpty("") = ""
* CharSequenceUtil.trimToEmpty(" ") = ""
* CharSequenceUtil.trimToEmpty("abc") = "abc"
* CharSequenceUtil.trimToEmpty(" abc ") = "abc"
* </pre>
*
* @param str 字符串
@ -553,11 +547,11 @@ public class CharSequenceUtil {
* 除去字符串头尾部的空白如果字符串是{@code null}或者""返回{@code null}
*
* <pre>
* StrUtil.trimToNull(null) = null
* StrUtil.trimToNull("") = null
* StrUtil.trimToNull(" ") = null
* StrUtil.trimToNull("abc") = "abc"
* StrUtil.trimToEmpty(" abc ") = "abc"
* CharSequenceUtil.trimToNull(null) = null
* CharSequenceUtil.trimToNull("") = null
* CharSequenceUtil.trimToNull(" ") = null
* CharSequenceUtil.trimToNull("abc") = "abc"
* CharSequenceUtil.trimToEmpty(" abc ") = "abc"
* </pre>
*
* @param str 字符串
@ -1169,17 +1163,17 @@ public class CharSequenceUtil {
* 指定范围内查找字符串忽略大小写<br>
*
* <pre>
* StrUtil.indexOfIgnoreCase(null, *, *) = -1
* StrUtil.indexOfIgnoreCase(*, null, *) = -1
* StrUtil.indexOfIgnoreCase("", "", 0) = 0
* StrUtil.indexOfIgnoreCase("aabaabaa", "A", 0) = 0
* StrUtil.indexOfIgnoreCase("aabaabaa", "B", 0) = 2
* StrUtil.indexOfIgnoreCase("aabaabaa", "AB", 0) = 1
* StrUtil.indexOfIgnoreCase("aabaabaa", "B", 3) = 5
* StrUtil.indexOfIgnoreCase("aabaabaa", "B", 9) = -1
* StrUtil.indexOfIgnoreCase("aabaabaa", "B", -1) = 2
* StrUtil.indexOfIgnoreCase("aabaabaa", "", 2) = 2
* StrUtil.indexOfIgnoreCase("abc", "", 9) = -1
* CharSequenceUtil.indexOfIgnoreCase(null, *, *) = -1
* CharSequenceUtil.indexOfIgnoreCase(*, null, *) = -1
* CharSequenceUtil.indexOfIgnoreCase("", "", 0) = 0
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "A", 0) = 0
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "B", 0) = 2
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "AB", 0) = 1
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "B", 3) = 5
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "B", 9) = -1
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "B", -1) = 2
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "", 2) = 2
* CharSequenceUtil.indexOfIgnoreCase("abc", "", 9) = -1
* </pre>
*
* @param str 字符串
@ -1195,17 +1189,17 @@ public class CharSequenceUtil {
* 指定范围内查找字符串
*
* <pre>
* StrUtil.indexOfIgnoreCase(null, *, *) = -1
* StrUtil.indexOfIgnoreCase(*, null, *) = -1
* StrUtil.indexOfIgnoreCase("", "", 0) = 0
* StrUtil.indexOfIgnoreCase("aabaabaa", "A", 0) = 0
* StrUtil.indexOfIgnoreCase("aabaabaa", "B", 0) = 2
* StrUtil.indexOfIgnoreCase("aabaabaa", "AB", 0) = 1
* StrUtil.indexOfIgnoreCase("aabaabaa", "B", 3) = 5
* StrUtil.indexOfIgnoreCase("aabaabaa", "B", 9) = -1
* StrUtil.indexOfIgnoreCase("aabaabaa", "B", -1) = 2
* StrUtil.indexOfIgnoreCase("aabaabaa", "", 2) = 2
* StrUtil.indexOfIgnoreCase("abc", "", 9) = -1
* CharSequenceUtil.indexOfIgnoreCase(null, *, *) = -1
* CharSequenceUtil.indexOfIgnoreCase(*, null, *) = -1
* CharSequenceUtil.indexOfIgnoreCase("", "", 0) = 0
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "A", 0) = 0
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "B", 0) = 2
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "AB", 0) = 1
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "B", 3) = 5
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "B", 9) = -1
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "B", -1) = 2
* CharSequenceUtil.indexOfIgnoreCase("aabaabaa", "", 2) = 2
* CharSequenceUtil.indexOfIgnoreCase("abc", "", 9) = -1
* </pre>
*
* @param str 字符串
@ -1230,7 +1224,7 @@ public class CharSequenceUtil {
*/
public static int indexOf(CharSequence text, CharSequence searchStr, int from, boolean ignoreCase) {
if (isEmpty(text) || isEmpty(searchStr)) {
if (StrUtil.equals(text, searchStr)) {
if (CharSequenceUtil.equals(text, searchStr)) {
return 0;
} else {
return INDEX_NOT_FOUND;
@ -1278,7 +1272,7 @@ public class CharSequenceUtil {
*/
public static int lastIndexOf(CharSequence text, CharSequence searchStr, int from, boolean ignoreCase) {
if (isEmpty(text) || isEmpty(searchStr)) {
if (StrUtil.equals(text, searchStr)) {
if (CharSequenceUtil.equals(text, searchStr)) {
return 0;
} else {
return INDEX_NOT_FOUND;
@ -1298,17 +1292,17 @@ public class CharSequenceUtil {
* 例子*代表任意字符
*
* <pre>
* StrUtil.ordinalIndexOf(null, *, *) = -1
* StrUtil.ordinalIndexOf(*, null, *) = -1
* StrUtil.ordinalIndexOf("", "", *) = 0
* StrUtil.ordinalIndexOf("aabaabaa", "a", 1) = 0
* StrUtil.ordinalIndexOf("aabaabaa", "a", 2) = 1
* StrUtil.ordinalIndexOf("aabaabaa", "b", 1) = 2
* StrUtil.ordinalIndexOf("aabaabaa", "b", 2) = 5
* StrUtil.ordinalIndexOf("aabaabaa", "ab", 1) = 1
* StrUtil.ordinalIndexOf("aabaabaa", "ab", 2) = 4
* StrUtil.ordinalIndexOf("aabaabaa", "", 1) = 0
* StrUtil.ordinalIndexOf("aabaabaa", "", 2) = 0
* CharSequenceUtil.ordinalIndexOf(null, *, *) = -1
* CharSequenceUtil.ordinalIndexOf(*, null, *) = -1
* CharSequenceUtil.ordinalIndexOf("", "", *) = 0
* CharSequenceUtil.ordinalIndexOf("aabaabaa", "a", 1) = 0
* CharSequenceUtil.ordinalIndexOf("aabaabaa", "a", 2) = 1
* CharSequenceUtil.ordinalIndexOf("aabaabaa", "b", 1) = 2
* CharSequenceUtil.ordinalIndexOf("aabaabaa", "b", 2) = 5
* CharSequenceUtil.ordinalIndexOf("aabaabaa", "ab", 1) = 1
* CharSequenceUtil.ordinalIndexOf("aabaabaa", "ab", 2) = 4
* CharSequenceUtil.ordinalIndexOf("aabaabaa", "", 1) = 0
* CharSequenceUtil.ordinalIndexOf("aabaabaa", "", 2) = 0
* </pre>
*
* @param str 被检查的字符串可以为null
@ -2106,13 +2100,13 @@ public class CharSequenceUtil {
* 切割指定长度的后部分的字符串
*
* <pre>
* StrUtil.subSufByLength("abcde", 3) = "cde"
* StrUtil.subSufByLength("abcde", 0) = ""
* StrUtil.subSufByLength("abcde", -5) = ""
* StrUtil.subSufByLength("abcde", -1) = ""
* StrUtil.subSufByLength("abcde", 5) = "abcde"
* StrUtil.subSufByLength("abcde", 10) = "abcde"
* StrUtil.subSufByLength(null, 3) = null
* CharSequenceUtil.subSufByLength("abcde", 3) = "cde"
* CharSequenceUtil.subSufByLength("abcde", 0) = ""
* CharSequenceUtil.subSufByLength("abcde", -5) = ""
* CharSequenceUtil.subSufByLength("abcde", -1) = ""
* CharSequenceUtil.subSufByLength("abcde", 5) = "abcde"
* CharSequenceUtil.subSufByLength("abcde", 10) = "abcde"
* CharSequenceUtil.subSufByLength(null, 3) = null
* </pre>
*
* @param string 字符串
@ -2156,14 +2150,14 @@ public class CharSequenceUtil {
* 如果分隔字符串为空串""则返回空串如果分隔字符串未找到返回原字符串举例如下
*
* <pre>
* StrUtil.subBefore(null, *, false) = null
* StrUtil.subBefore("", *, false) = ""
* StrUtil.subBefore("abc", "a", false) = ""
* StrUtil.subBefore("abcba", "b", false) = "a"
* StrUtil.subBefore("abc", "c", false) = "ab"
* StrUtil.subBefore("abc", "d", false) = "abc"
* StrUtil.subBefore("abc", "", false) = ""
* StrUtil.subBefore("abc", null, false) = "abc"
* CharSequenceUtil.subBefore(null, *, false) = null
* CharSequenceUtil.subBefore("", *, false) = ""
* CharSequenceUtil.subBefore("abc", "a", false) = ""
* CharSequenceUtil.subBefore("abcba", "b", false) = "a"
* CharSequenceUtil.subBefore("abc", "c", false) = "ab"
* CharSequenceUtil.subBefore("abc", "d", false) = "abc"
* CharSequenceUtil.subBefore("abc", "", false) = ""
* CharSequenceUtil.subBefore("abc", null, false) = "abc"
* </pre>
*
* @param string 被查找的字符串
@ -2198,12 +2192,12 @@ public class CharSequenceUtil {
* 如果分隔字符串未找到返回原字符串举例如下
*
* <pre>
* StrUtil.subBefore(null, *, false) = null
* StrUtil.subBefore("", *, false) = ""
* StrUtil.subBefore("abc", 'a', false) = ""
* StrUtil.subBefore("abcba", 'b', false) = "a"
* StrUtil.subBefore("abc", 'c', false) = "ab"
* StrUtil.subBefore("abc", 'd', false) = "abc"
* CharSequenceUtil.subBefore(null, *, false) = null
* CharSequenceUtil.subBefore("", *, false) = ""
* CharSequenceUtil.subBefore("abc", 'a', false) = ""
* CharSequenceUtil.subBefore("abcba", 'b', false) = "a"
* CharSequenceUtil.subBefore("abc", 'c', false) = "ab"
* CharSequenceUtil.subBefore("abc", 'd', false) = "abc"
* </pre>
*
* @param string 被查找的字符串
@ -2234,14 +2228,14 @@ public class CharSequenceUtil {
* 如果分隔字符串为空串null或""则返回空串如果分隔字符串未找到返回空串举例如下
*
* <pre>
* StrUtil.subAfter(null, *, false) = null
* StrUtil.subAfter("", *, false) = ""
* StrUtil.subAfter(*, null, false) = ""
* StrUtil.subAfter("abc", "a", false) = "bc"
* StrUtil.subAfter("abcba", "b", false) = "cba"
* StrUtil.subAfter("abc", "c", false) = ""
* StrUtil.subAfter("abc", "d", false) = ""
* StrUtil.subAfter("abc", "", false) = "abc"
* CharSequenceUtil.subAfter(null, *, false) = null
* CharSequenceUtil.subAfter("", *, false) = ""
* CharSequenceUtil.subAfter(*, null, false) = ""
* CharSequenceUtil.subAfter("abc", "a", false) = "bc"
* CharSequenceUtil.subAfter("abcba", "b", false) = "cba"
* CharSequenceUtil.subAfter("abc", "c", false) = ""
* CharSequenceUtil.subAfter("abc", "d", false) = ""
* CharSequenceUtil.subAfter("abc", "", false) = "abc"
* </pre>
*
* @param string 被查找的字符串
@ -2272,12 +2266,12 @@ public class CharSequenceUtil {
* 如果分隔字符串为空串null或""则返回空串如果分隔字符串未找到返回空串举例如下
*
* <pre>
* StrUtil.subAfter(null, *, false) = null
* StrUtil.subAfter("", *, false) = ""
* StrUtil.subAfter("abc", 'a', false) = "bc"
* StrUtil.subAfter("abcba", 'b', false) = "cba"
* StrUtil.subAfter("abc", 'c', false) = ""
* StrUtil.subAfter("abc", 'd', false) = ""
* CharSequenceUtil.subAfter(null, *, false) = null
* CharSequenceUtil.subAfter("", *, false) = ""
* CharSequenceUtil.subAfter("abc", 'a', false) = "bc"
* CharSequenceUtil.subAfter("abcba", 'b', false) = "cba"
* CharSequenceUtil.subAfter("abc", 'c', false) = ""
* CharSequenceUtil.subAfter("abc", 'd', false) = ""
* </pre>
*
* @param string 被查找的字符串
@ -2304,16 +2298,16 @@ public class CharSequenceUtil {
* 栗子
*
* <pre>
* StrUtil.subBetween("wx[b]yz", "[", "]") = "b"
* StrUtil.subBetween(null, *, *) = null
* StrUtil.subBetween(*, null, *) = null
* StrUtil.subBetween(*, *, null) = null
* StrUtil.subBetween("", "", "") = ""
* StrUtil.subBetween("", "", "]") = null
* StrUtil.subBetween("", "[", "]") = null
* StrUtil.subBetween("yabcz", "", "") = ""
* StrUtil.subBetween("yabcz", "y", "z") = "abc"
* StrUtil.subBetween("yabczyabcz", "y", "z") = "abc"
* CharSequenceUtil.subBetween("wx[b]yz", "[", "]") = "b"
* CharSequenceUtil.subBetween(null, *, *) = null
* CharSequenceUtil.subBetween(*, null, *) = null
* CharSequenceUtil.subBetween(*, *, null) = null
* CharSequenceUtil.subBetween("", "", "") = ""
* CharSequenceUtil.subBetween("", "", "]") = null
* CharSequenceUtil.subBetween("", "[", "]") = null
* CharSequenceUtil.subBetween("yabcz", "", "") = ""
* CharSequenceUtil.subBetween("yabcz", "y", "z") = "abc"
* CharSequenceUtil.subBetween("yabczyabcz", "y", "z") = "abc"
* </pre>
*
* @param str 被切割的字符串
@ -2347,12 +2341,12 @@ public class CharSequenceUtil {
* 栗子
*
* <pre>
* StrUtil.subBetween(null, *) = null
* StrUtil.subBetween("", "") = ""
* StrUtil.subBetween("", "tag") = null
* StrUtil.subBetween("tagabctag", null) = null
* StrUtil.subBetween("tagabctag", "") = ""
* StrUtil.subBetween("tagabctag", "tag") = "abc"
* CharSequenceUtil.subBetween(null, *) = null
* CharSequenceUtil.subBetween("", "") = ""
* CharSequenceUtil.subBetween("", "tag") = null
* CharSequenceUtil.subBetween("tagabctag", null) = null
* CharSequenceUtil.subBetween("tagabctag", "") = ""
* CharSequenceUtil.subBetween("tagabctag", "tag") = "abc"
* </pre>
*
* @param str 被切割的字符串
@ -2370,17 +2364,17 @@ public class CharSequenceUtil {
* 栗子
*
* <pre>
* StrUtil.subBetweenAll("wx[b]y[z]", "[", "]") = ["b","z"]
* StrUtil.subBetweenAll(null, *, *) = []
* StrUtil.subBetweenAll(*, null, *) = []
* StrUtil.subBetweenAll(*, *, null) = []
* StrUtil.subBetweenAll("", "", "") = []
* StrUtil.subBetweenAll("", "", "]") = []
* StrUtil.subBetweenAll("", "[", "]") = []
* StrUtil.subBetweenAll("yabcz", "", "") = []
* StrUtil.subBetweenAll("yabcz", "y", "z") = ["abc"]
* StrUtil.subBetweenAll("yabczyabcz", "y", "z") = ["abc","abc"]
* StrUtil.subBetweenAll("[yabc[zy]abcz]", "[", "]"); = ["zy"] 重叠时只截取内部
* CharSequenceUtil.subBetweenAll("wx[b]y[z]", "[", "]") = ["b","z"]
* CharSequenceUtil.subBetweenAll(null, *, *) = []
* CharSequenceUtil.subBetweenAll(*, null, *) = []
* CharSequenceUtil.subBetweenAll(*, *, null) = []
* CharSequenceUtil.subBetweenAll("", "", "") = []
* CharSequenceUtil.subBetweenAll("", "", "]") = []
* CharSequenceUtil.subBetweenAll("", "[", "]") = []
* CharSequenceUtil.subBetweenAll("yabcz", "", "") = []
* CharSequenceUtil.subBetweenAll("yabcz", "y", "z") = ["abc"]
* CharSequenceUtil.subBetweenAll("yabczyabcz", "y", "z") = ["abc","abc"]
* CharSequenceUtil.subBetweenAll("[yabc[zy]abcz]", "[", "]"); = ["zy"] 重叠时只截取内部
* </pre>
*
* @param str 被切割的字符串
@ -2425,15 +2419,15 @@ public class CharSequenceUtil {
* 栗子
*
* <pre>
* StrUtil.subBetweenAll(null, *) = []
* StrUtil.subBetweenAll(*, null) = []
* StrUtil.subBetweenAll(*, *) = []
* StrUtil.subBetweenAll("", "") = []
* StrUtil.subBetweenAll("", "#") = []
* StrUtil.subBetweenAll("gotanks", "") = []
* StrUtil.subBetweenAll("#gotanks#", "#") = ["gotanks"]
* StrUtil.subBetweenAll("#hello# #world#!", "#") = ["hello", "world"]
* StrUtil.subBetweenAll("#hello# world#!", "#"); = ["hello"]
* CharSequenceUtil.subBetweenAll(null, *) = []
* CharSequenceUtil.subBetweenAll(*, null) = []
* CharSequenceUtil.subBetweenAll(*, *) = []
* CharSequenceUtil.subBetweenAll("", "") = []
* CharSequenceUtil.subBetweenAll("", "#") = []
* CharSequenceUtil.subBetweenAll("gotanks", "") = []
* CharSequenceUtil.subBetweenAll("#gotanks#", "#") = ["gotanks"]
* CharSequenceUtil.subBetweenAll("#hello# #world#!", "#") = ["hello", "world"]
* CharSequenceUtil.subBetweenAll("#hello# world#!", "#"); = ["hello"]
* </pre>
*
* @param str 被切割的字符串
@ -2452,9 +2446,9 @@ public class CharSequenceUtil {
* 重复某个字符
*
* <pre>
* StrUtil.repeat('e', 0) = ""
* StrUtil.repeat('e', 3) = "eee"
* StrUtil.repeat('e', -2) = ""
* CharSequenceUtil.repeat('e', 0) = ""
* CharSequenceUtil.repeat('e', 3) = "eee"
* CharSequenceUtil.repeat('e', -2) = ""
* </pre>
*
* @param c 被重复的字符
@ -2522,7 +2516,7 @@ public class CharSequenceUtil {
return null;
}
if (padLen <= 0) {
return StrUtil.EMPTY;
return CharSequenceUtil.EMPTY;
}
final int strLen = str.length();
if (strLen == padLen) {
@ -2543,9 +2537,9 @@ public class CharSequenceUtil {
* 重复某个字符串并通过分界符连接
*
* <pre>
* StrUtil.repeatAndJoin("?", 5, ",") = "?,?,?,?,?"
* StrUtil.repeatAndJoin("?", 0, ",") = ""
* StrUtil.repeatAndJoin("?", 5, null) = "?????"
* CharSequenceUtil.repeatAndJoin("?", 5, ",") = "?,?,?,?,?"
* CharSequenceUtil.repeatAndJoin("?", 0, ",") = ""
* CharSequenceUtil.repeatAndJoin("?", 5, null) = "?????"
* </pre>
*
* @param str 被重复的字符串
@ -3071,10 +3065,10 @@ public class CharSequenceUtil {
* leftPad (org.apache.commons.lang3.leftPad)
*
* <pre>
* StrUtil.padPre(null, *, *);//null
* StrUtil.padPre("1", 3, "ABC");//"AB1"
* StrUtil.padPre("123", 2, "ABC");//"12"
* StrUtil.padPre("1039", -1, "0");//"103"
* CharSequenceUtil.padPre(null, *, *);//null
* CharSequenceUtil.padPre("1", 3, "ABC");//"AB1"
* CharSequenceUtil.padPre("123", 2, "ABC");//"12"
* CharSequenceUtil.padPre("1039", -1, "0");//"103"
* </pre>
*
* @param str 字符串
@ -3102,9 +3096,9 @@ public class CharSequenceUtil {
* leftPad (org.apache.commons.lang3.leftPad)
*
* <pre>
* StrUtil.padPre(null, *, *);//null
* StrUtil.padPre("1", 3, '0');//"001"
* StrUtil.padPre("123", 2, '0');//"12"
* CharSequenceUtil.padPre(null, *, *);//null
* CharSequenceUtil.padPre("1", 3, '0');//"001"
* CharSequenceUtil.padPre("123", 2, '0');//"12"
* </pre>
*
* @param str 字符串
@ -3131,10 +3125,10 @@ public class CharSequenceUtil {
* 补充字符串以满足最小长度如果提供的字符串大于指定长度截断之
*
* <pre>
* StrUtil.padAfter(null, *, *);//null
* StrUtil.padAfter("1", 3, '0');//"100"
* StrUtil.padAfter("123", 2, '0');//"23"
* StrUtil.padAfter("123", -1, '0')//"" 空串
* CharSequenceUtil.padAfter(null, *, *);//null
* CharSequenceUtil.padAfter("1", 3, '0');//"100"
* CharSequenceUtil.padAfter("123", 2, '0');//"23"
* CharSequenceUtil.padAfter("123", -1, '0')//"" 空串
* </pre>
*
* @param str 字符串如果为{@code null}直接返回null
@ -3161,9 +3155,9 @@ public class CharSequenceUtil {
* 补充字符串以满足最小长度
*
* <pre>
* StrUtil.padAfter(null, *, *);//null
* StrUtil.padAfter("1", 3, "ABC");//"1AB"
* StrUtil.padAfter("123", 2, "ABC");//"23"
* CharSequenceUtil.padAfter(null, *, *);//null
* CharSequenceUtil.padAfter("1", 3, "ABC");//"1AB"
* CharSequenceUtil.padAfter("123", 2, "ABC");//"23"
* </pre>
*
* @param str 字符串如果为{@code null}直接返回null
@ -3193,12 +3187,12 @@ public class CharSequenceUtil {
* 居中字符串两边补充指定字符串如果指定长度小于字符串则返回原字符串
*
* <pre>
* StrUtil.center(null, *) = null
* StrUtil.center("", 4) = " "
* StrUtil.center("ab", -1) = "ab"
* StrUtil.center("ab", 4) = " ab "
* StrUtil.center("abcd", 2) = "abcd"
* StrUtil.center("a", 4) = " a "
* CharSequenceUtil.center(null, *) = null
* CharSequenceUtil.center("", 4) = " "
* CharSequenceUtil.center("ab", -1) = "ab"
* CharSequenceUtil.center("ab", 4) = " ab "
* CharSequenceUtil.center("abcd", 2) = "abcd"
* CharSequenceUtil.center("a", 4) = " a "
* </pre>
*
* @param str 字符串
@ -3214,14 +3208,14 @@ public class CharSequenceUtil {
* 居中字符串两边补充指定字符串如果指定长度小于字符串则返回原字符串
*
* <pre>
* StrUtil.center(null, *, *) = null
* StrUtil.center("", 4, ' ') = " "
* StrUtil.center("ab", -1, ' ') = "ab"
* StrUtil.center("ab", 4, ' ') = " ab "
* StrUtil.center("abcd", 2, ' ') = "abcd"
* StrUtil.center("a", 4, ' ') = " a "
* StrUtil.center("a", 4, 'y') = "yayy"
* StrUtil.center("abc", 7, ' ') = " abc "
* CharSequenceUtil.center(null, *, *) = null
* CharSequenceUtil.center("", 4, ' ') = " "
* CharSequenceUtil.center("ab", -1, ' ') = "ab"
* CharSequenceUtil.center("ab", 4, ' ') = " ab "
* CharSequenceUtil.center("abcd", 2, ' ') = "abcd"
* CharSequenceUtil.center("a", 4, ' ') = " a "
* CharSequenceUtil.center("a", 4, 'y') = "yayy"
* CharSequenceUtil.center("abc", 7, ' ') = " abc "
* </pre>
*
* @param str 字符串
@ -3248,15 +3242,15 @@ public class CharSequenceUtil {
* 居中字符串两边补充指定字符串如果指定长度小于字符串则返回原字符串
*
* <pre>
* StrUtil.center(null, *, *) = null
* StrUtil.center("", 4, " ") = " "
* StrUtil.center("ab", -1, " ") = "ab"
* StrUtil.center("ab", 4, " ") = " ab "
* StrUtil.center("abcd", 2, " ") = "abcd"
* StrUtil.center("a", 4, " ") = " a "
* StrUtil.center("a", 4, "yz") = "yayz"
* StrUtil.center("abc", 7, null) = " abc "
* StrUtil.center("abc", 7, "") = " abc "
* CharSequenceUtil.center(null, *, *) = null
* CharSequenceUtil.center("", 4, " ") = " "
* CharSequenceUtil.center("ab", -1, " ") = "ab"
* CharSequenceUtil.center("ab", 4, " ") = " ab "
* CharSequenceUtil.center("abcd", 2, " ") = "abcd"
* CharSequenceUtil.center("a", 4, " ") = " a "
* CharSequenceUtil.center("a", 4, "yz") = "yayz"
* CharSequenceUtil.center("abc", 7, null) = " abc "
* CharSequenceUtil.center("abc", 7, "") = " abc "
* </pre>
*
* @param str 字符串
@ -3300,13 +3294,13 @@ public class CharSequenceUtil {
* 参数为 {@code null} 或者 "" 返回 {@code 0}.
*
* <pre>
* StrUtil.count(null, *) = 0
* StrUtil.count("", *) = 0
* StrUtil.count("abba", null) = 0
* StrUtil.count("abba", "") = 0
* StrUtil.count("abba", "a") = 2
* StrUtil.count("abba", "ab") = 1
* StrUtil.count("abba", "xxx") = 0
* CharSequenceUtil.count(null, *) = 0
* CharSequenceUtil.count("", *) = 0
* CharSequenceUtil.count("abba", null) = 0
* CharSequenceUtil.count("abba", "") = 0
* CharSequenceUtil.count("abba", "a") = 2
* CharSequenceUtil.count("abba", "ab") = 1
* CharSequenceUtil.count("abba", "xxx") = 0
* </pre>
*
* @param content 被查找的字符串
@ -3356,16 +3350,16 @@ public class CharSequenceUtil {
* 比较两个字符串用于排序
*
* <pre>
* StrUtil.compare(null, null, *) = 0
* StrUtil.compare(null , "a", true) &lt; 0
* StrUtil.compare(null , "a", false) &gt; 0
* StrUtil.compare("a", null, true) &gt; 0
* StrUtil.compare("a", null, false) &lt; 0
* StrUtil.compare("abc", "abc", *) = 0
* StrUtil.compare("a", "b", *) &lt; 0
* StrUtil.compare("b", "a", *) &gt; 0
* StrUtil.compare("a", "B", *) &gt; 0
* StrUtil.compare("ab", "abc", *) &lt; 0
* CharSequenceUtil.compare(null, null, *) = 0
* CharSequenceUtil.compare(null , "a", true) &lt; 0
* CharSequenceUtil.compare(null , "a", false) &gt; 0
* CharSequenceUtil.compare("a", null, true) &gt; 0
* CharSequenceUtil.compare("a", null, false) &lt; 0
* CharSequenceUtil.compare("abc", "abc", *) = 0
* CharSequenceUtil.compare("a", "b", *) &lt; 0
* CharSequenceUtil.compare("b", "a", *) &gt; 0
* CharSequenceUtil.compare("a", "B", *) &gt; 0
* CharSequenceUtil.compare("ab", "abc", *) &lt; 0
* </pre>
*
* @param str1 字符串1
@ -3390,18 +3384,18 @@ public class CharSequenceUtil {
* 比较两个字符串用于排序大小写不敏感
*
* <pre>
* StrUtil.compareIgnoreCase(null, null, *) = 0
* StrUtil.compareIgnoreCase(null , "a", true) &lt; 0
* StrUtil.compareIgnoreCase(null , "a", false) &gt; 0
* StrUtil.compareIgnoreCase("a", null, true) &gt; 0
* StrUtil.compareIgnoreCase("a", null, false) &lt; 0
* StrUtil.compareIgnoreCase("abc", "abc", *) = 0
* StrUtil.compareIgnoreCase("abc", "ABC", *) = 0
* StrUtil.compareIgnoreCase("a", "b", *) &lt; 0
* StrUtil.compareIgnoreCase("b", "a", *) &gt; 0
* StrUtil.compareIgnoreCase("a", "B", *) &lt; 0
* StrUtil.compareIgnoreCase("A", "b", *) &lt; 0
* StrUtil.compareIgnoreCase("ab", "abc", *) &lt; 0
* CharSequenceUtil.compareIgnoreCase(null, null, *) = 0
* CharSequenceUtil.compareIgnoreCase(null , "a", true) &lt; 0
* CharSequenceUtil.compareIgnoreCase(null , "a", false) &gt; 0
* CharSequenceUtil.compareIgnoreCase("a", null, true) &gt; 0
* CharSequenceUtil.compareIgnoreCase("a", null, false) &lt; 0
* CharSequenceUtil.compareIgnoreCase("abc", "abc", *) = 0
* CharSequenceUtil.compareIgnoreCase("abc", "ABC", *) = 0
* CharSequenceUtil.compareIgnoreCase("a", "b", *) &lt; 0
* CharSequenceUtil.compareIgnoreCase("b", "a", *) &gt; 0
* CharSequenceUtil.compareIgnoreCase("a", "B", *) &lt; 0
* CharSequenceUtil.compareIgnoreCase("A", "b", *) &lt; 0
* CharSequenceUtil.compareIgnoreCase("ab", "abc", *) &lt; 0
* </pre>
*
* @param str1 字符串1
@ -3427,14 +3421,14 @@ public class CharSequenceUtil {
* null版本排在最小
*
* <pre>
* StrUtil.compareVersion(null, "v1") &lt; 0
* StrUtil.compareVersion("v1", "v1") = 0
* StrUtil.compareVersion(null, null) = 0
* StrUtil.compareVersion("v1", null) &gt; 0
* StrUtil.compareVersion("1.0.0", "1.0.2") &lt; 0
* StrUtil.compareVersion("1.0.2", "1.0.2a") &lt; 0
* StrUtil.compareVersion("1.13.0", "1.12.1c") &gt; 0
* StrUtil.compareVersion("V0.0.20170102", "V0.0.20170101") &gt; 0
* CharSequenceUtil.compareVersion(null, "v1") &lt; 0
* CharSequenceUtil.compareVersion("v1", "v1") = 0
* CharSequenceUtil.compareVersion(null, null) = 0
* CharSequenceUtil.compareVersion("v1", null) &gt; 0
* CharSequenceUtil.compareVersion("1.0.0", "1.0.2") &lt; 0
* CharSequenceUtil.compareVersion("1.0.2", "1.0.2a") &lt; 0
* CharSequenceUtil.compareVersion("1.13.0", "1.12.1c") &gt; 0
* CharSequenceUtil.compareVersion("V0.0.20170102", "V0.0.20170101") &gt; 0
* </pre>
*
* @param version1 版本1
@ -3828,13 +3822,13 @@ public class CharSequenceUtil {
* 俗称脱敏功能后面其他功能可以见DesensitizedUtil(脱敏工具类)
*
* <pre>
* StrUtil.hide(null,*,*)=null
* StrUtil.hide("",0,*)=""
* StrUtil.hide("jackduan@163.com",-1,4) ****duan@163.com
* StrUtil.hide("jackduan@163.com",2,3) ja*kduan@163.com
* StrUtil.hide("jackduan@163.com",3,2) jackduan@163.com
* StrUtil.hide("jackduan@163.com",16,16) jackduan@163.com
* StrUtil.hide("jackduan@163.com",16,17) jackduan@163.com
* CharSequenceUtil.hide(null,*,*)=null
* CharSequenceUtil.hide("",0,*)=""
* CharSequenceUtil.hide("jackduan@163.com",-1,4) ****duan@163.com
* CharSequenceUtil.hide("jackduan@163.com",2,3) ja*kduan@163.com
* CharSequenceUtil.hide("jackduan@163.com",3,2) jackduan@163.com
* CharSequenceUtil.hide("jackduan@163.com",16,16) jackduan@163.com
* CharSequenceUtil.hide("jackduan@163.com",16,17) jackduan@163.com
* </pre>
*
* @param str 字符串
@ -3851,16 +3845,16 @@ public class CharSequenceUtil {
* 脱敏使用默认的脱敏策略
*
* <pre>
* StrUtil.desensitized("100", DesensitizedUtil.DesensitizedType.USER_ID)) = "0"
* StrUtil.desensitized("段正淳", DesensitizedUtil.DesensitizedType.CHINESE_NAME)) = "段**"
* StrUtil.desensitized("51343620000320711X", DesensitizedUtil.DesensitizedType.ID_CARD)) = "5***************1X"
* StrUtil.desensitized("09157518479", DesensitizedUtil.DesensitizedType.FIXED_PHONE)) = "0915*****79"
* StrUtil.desensitized("18049531999", DesensitizedUtil.DesensitizedType.MOBILE_PHONE)) = "180****1999"
* StrUtil.desensitized("北京市海淀区马连洼街道289号", DesensitizedUtil.DesensitizedType.ADDRESS)) = "北京市海淀区马********"
* StrUtil.desensitized("duandazhi-jack@gmail.com.cn", DesensitizedUtil.DesensitizedType.EMAIL)) = "d*************@gmail.com.cn"
* StrUtil.desensitized("1234567890", DesensitizedUtil.DesensitizedType.PASSWORD)) = "**********"
* StrUtil.desensitized("苏D40000", DesensitizedUtil.DesensitizedType.CAR_LICENSE)) = "苏D4***0"
* StrUtil.desensitized("11011111222233333256", DesensitizedType.BANK_CARD)) = "1101 **** **** **** 3256"
* CharSequenceUtil.desensitized("100", DesensitizedUtil.DesensitizedType.USER_ID)) = "0"
* CharSequenceUtil.desensitized("段正淳", DesensitizedUtil.DesensitizedType.CHINESE_NAME)) = "段**"
* CharSequenceUtil.desensitized("51343620000320711X", DesensitizedUtil.DesensitizedType.ID_CARD)) = "5***************1X"
* CharSequenceUtil.desensitized("09157518479", DesensitizedUtil.DesensitizedType.FIXED_PHONE)) = "0915*****79"
* CharSequenceUtil.desensitized("18049531999", DesensitizedUtil.DesensitizedType.MOBILE_PHONE)) = "180****1999"
* CharSequenceUtil.desensitized("北京市海淀区马连洼街道289号", DesensitizedUtil.DesensitizedType.ADDRESS)) = "北京市海淀区马********"
* CharSequenceUtil.desensitized("duandazhi-jack@gmail.com.cn", DesensitizedUtil.DesensitizedType.EMAIL)) = "d*************@gmail.com.cn"
* CharSequenceUtil.desensitized("1234567890", DesensitizedUtil.DesensitizedType.PASSWORD)) = "**********"
* CharSequenceUtil.desensitized("苏D40000", DesensitizedUtil.DesensitizedType.CAR_LICENSE)) = "苏D4***0"
* CharSequenceUtil.desensitized("11011111222233333256", DesensitizedType.BANK_CARD)) = "1101 **** **** **** 3256"
* </pre>
*
* @param str 字符串
@ -4005,7 +3999,7 @@ public class CharSequenceUtil {
*/
@SuppressWarnings("unchecked")
public static <T extends CharSequence> T firstNonEmpty(T... strs) {
return ArrayUtil.firstMatch(StrUtil::isNotEmpty, strs);
return ArrayUtil.firstMatch(CharSequenceUtil::isNotEmpty, strs);
}
/**
@ -4019,7 +4013,7 @@ public class CharSequenceUtil {
*/
@SuppressWarnings("unchecked")
public static <T extends CharSequence> T firstNonBlank(T... strs) {
return ArrayUtil.firstMatch(StrUtil::isNotBlank, strs);
return ArrayUtil.firstMatch(CharSequenceUtil::isNotBlank, strs);
}
// ------------------------------------------------------------------------ lower and upper
@ -4161,9 +4155,9 @@ public class CharSequenceUtil {
* 切换给定字符串中的大小写大写转小写小写转大写
*
* <pre>
* StrUtil.swapCase(null) = null
* StrUtil.swapCase("") = ""
* StrUtil.swapCase("The dog has a BONE") = "tHE DOG HAS A bone"
* CharSequenceUtil.swapCase(null) = null
* CharSequenceUtil.swapCase("") = ""
* CharSequenceUtil.swapCase("The dog has a BONE") = "tHE DOG HAS A bone"
* </pre>
*
* @param str 字符串
@ -4257,7 +4251,7 @@ public class CharSequenceUtil {
* @return 是否包围空串不包围
*/
public static boolean isSurround(CharSequence str, CharSequence prefix, CharSequence suffix) {
if (StrUtil.isBlank(str)) {
if (CharSequenceUtil.isBlank(str)) {
return false;
}
if (str.length() < (prefix.length() + suffix.length())) {
@ -4277,7 +4271,7 @@ public class CharSequenceUtil {
* @return 是否包围空串不包围
*/
public static boolean isSurround(CharSequence str, char prefix, char suffix) {
if (StrUtil.isBlank(str)) {
if (CharSequenceUtil.isBlank(str)) {
return false;
}
if (str.length() < 2) {
@ -4462,7 +4456,7 @@ public class CharSequenceUtil {
* @since 3.2.3
*/
public static boolean isAllCharMatch(CharSequence value, Matcher<Character> matcher) {
if (StrUtil.isBlank(value)) {
if (CharSequenceUtil.isBlank(value)) {
return false;
}
for (int i = value.length(); --i >= 0; ) {