diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Console.java b/hutool-core/src/main/java/cn/hutool/core/lang/Console.java
index 0f1dfd8b5..a50f4edb2 100644
--- a/hutool-core/src/main/java/cn/hutool/core/lang/Console.java
+++ b/hutool-core/src/main/java/cn/hutool/core/lang/Console.java
@@ -1,13 +1,12 @@
package cn.hutool.core.lang;
-import static java.lang.System.out;
-
-import java.util.Scanner;
-
import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.StrUtil;
+import java.util.Scanner;
+
import static java.lang.System.err;
+import static java.lang.System.out;
/**
* 命令行(控制台)工具方法类
@@ -189,7 +188,7 @@ public class Console {
* @since 5.2.5
*/
public static String where() {
- StackTraceElement stackTraceElement = new Throwable().getStackTrace()[1];
+ final StackTraceElement stackTraceElement = new Throwable().getStackTrace()[1];
final String className = stackTraceElement.getClassName();
final String methodName = stackTraceElement.getMethodName();
final String fileName = stackTraceElement.getFileName();
diff --git a/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java
index dff3124b4..afe1ca6cf 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/StrUtil.java
@@ -1,14 +1,5 @@
package cn.hutool.core.util;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.text.MessageFormat;
-import java.util.*;
-import java.util.Map.Entry;
-import java.util.regex.Pattern;
-
import cn.hutool.core.comparator.VersionComparator;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Assert;
@@ -19,11 +10,24 @@ import cn.hutool.core.text.StrFormatter;
import cn.hutool.core.text.StrSpliter;
import cn.hutool.core.text.TextSimilarity;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.regex.Pattern;
+
/**
* 字符串工具类
- *
- * @author xiaoleilu
*
+ * @author xiaoleilu
*/
public class StrUtil {
@@ -74,12 +78,13 @@ public class StrUtil {
public static final String EMPTY_JSON = "{}";
// ------------------------------------------------------------------------ Blank
+
/**
* 字符串是否为空白 空白的定义如下:
* 1、为null
* 2、为不可见字符(如空格)
* 3、""
- *
+ *
* @param str 被检测的字符串
* @return 是否为空
*/
@@ -105,7 +110,7 @@ public class StrUtil {
* 1、为null
* 2、为不可见字符(如空格)
* 3、""
- *
+ *
* @param obj 对象
* @return 如果为字符串是否为空串
* @since 3.3.0
@@ -124,7 +129,7 @@ public class StrUtil {
* 1、不为null
* 2、不为不可见字符(如空格)
* 3、不为""
- *
+ *
* @param str 被检测的字符串
* @return 是否为非空
*/
@@ -134,7 +139,7 @@ public class StrUtil {
/**
* 是否包含空字符串
- *
+ *
* @param strs 字符串列表
* @return 是否包含空字符串
*/
@@ -153,7 +158,7 @@ public class StrUtil {
/**
* 给定所有字符串是否为空白
- *
+ *
* @param strs 字符串
* @return 所有字符串是否为空白
*/
@@ -171,11 +176,12 @@ public class StrUtil {
}
// ------------------------------------------------------------------------ Empty
+
/**
* 字符串是否为空,空的定义如下:
* 1、为null
* 2、为""
- *
+ *
* @param str 被检测的字符串
* @return 是否为空
*/
@@ -187,7 +193,7 @@ public class StrUtil {
* 如果对象是字符串是否为空串空的定义如下:
* 1、为null
* 2、为""
- *
+ *
* @param obj 对象
* @return 如果为字符串是否为空串
* @since 3.3.0
@@ -205,21 +211,21 @@ public class StrUtil {
* 字符串是否为非空白 空白的定义如下:
* 1、不为null
* 2、不为""
- *
+ *
* @param str 被检测的字符串
* @return 是否为非空
*/
public static boolean isNotEmpty(CharSequence str) {
return false == isEmpty(str);
}
-
+
/**
* 当给定字符串为null时,转换为Empty
- *
+ *
* @param str 被检查的字符串
* @return 原字符串或者空串
- * @since 4.6.3
* @see #nullToEmpty(CharSequence)
+ * @since 4.6.3
*/
public static String emptyIfNull(CharSequence str) {
return nullToEmpty(str);
@@ -227,7 +233,7 @@ public class StrUtil {
/**
* 当给定字符串为null时,转换为Empty
- *
+ *
* @param str 被转换的字符串
* @return 转换后的字符串
*/
@@ -237,17 +243,16 @@ public class StrUtil {
/**
* 如果字符串是null
,则返回指定默认字符串,否则返回字符串本身。
- *
+ *
*
* nullToDefault(null, "default") = "default" * nullToDefault("", "default") = "" * nullToDefault(" ", "default") = " " * nullToDefault("bat", "default") = "bat" *- * - * @param str 要转换的字符串 + * + * @param str 要转换的字符串 * @param defaultStr 默认字符串 - * * @return 字符串本身或指定的默认字符串 */ public static String nullToDefault(CharSequence str, String defaultStr) { @@ -256,17 +261,16 @@ public class StrUtil { /** * 如果字符串是
null
或者"",则返回指定默认字符串,否则返回字符串本身。
- *
+ *
* * emptyToDefault(null, "default") = "default" * emptyToDefault("", "default") = "default" * emptyToDefault(" ", "default") = " " * emptyToDefault("bat", "default") = "bat" *- * - * @param str 要转换的字符串 + * + * @param str 要转换的字符串 * @param defaultStr 默认字符串 - * * @return 字符串本身或指定的默认字符串 * @since 4.1.0 */ @@ -276,17 +280,16 @@ public class StrUtil { /** * 如果字符串是
null
或者""或者空白,则返回指定默认字符串,否则返回字符串本身。
- *
+ *
* * emptyToDefault(null, "default") = "default" * emptyToDefault("", "default") = "default" * emptyToDefault(" ", "default") = "default" * emptyToDefault("bat", "default") = "bat" *- * - * @param str 要转换的字符串 + * + * @param str 要转换的字符串 * @param defaultStr 默认字符串 - * * @return 字符串本身或指定的默认字符串 * @since 4.1.0 */ @@ -296,7 +299,7 @@ public class StrUtil { /** * 当给定字符串为空字符串时,转换为
null
- *
+ *
* @param str 被转换的字符串
* @return 转换后的字符串
*/
@@ -306,7 +309,7 @@ public class StrUtil {
/**
* 是否包含空字符串
- *
+ *
* @param strs 字符串列表
* @return 是否包含空字符串
*/
@@ -325,7 +328,7 @@ public class StrUtil {
/**
* 是否全部为空字符串
- *
+ *
* @param strs 字符串列表
* @return 是否全部为空字符串
*/
@@ -344,7 +347,7 @@ public class StrUtil {
/**
* 检查字符串是否为null、“null”、“undefined”
- *
+ *
* @param str 被检查的字符串
* @return 是否为null、“null”、“undefined”
* @since 4.0.10
@@ -358,7 +361,7 @@ public class StrUtil {
/**
* 检查字符串是否为null、“”、“null”、“undefined”
- *
+ *
* @param str 被检查的字符串
* @return 是否为null、“”、“null”、“undefined”
* @since 4.0.10
@@ -372,7 +375,7 @@ public class StrUtil {
/**
* 检查字符串是否为null、空白串、“null”、“undefined”
- *
+ *
* @param str 被检查的字符串
* @return 是否为null、空白串、“null”、“undefined”
* @since 4.0.10
@@ -386,7 +389,7 @@ public class StrUtil {
/**
* 是否为“null”、“undefined”,不做空指针检查
- *
+ *
* @param str 字符串
* @return 是否为“null”、“undefined”
*/
@@ -396,12 +399,13 @@ public class StrUtil {
}
// ------------------------------------------------------------------------ Trim
+
/**
* 除去字符串头尾部的空白,如果字符串是null
,依然返回null
。
- *
+ *
*
* 注意,和String.trim
不同,此方法使用NumberUtil.isBlankChar
来判定空白, 因而可以除去英文字符集之外的其它空白,如中文空格。
- *
+ *
*
* trim(null) = null * trim("") = "" @@ -409,9 +413,8 @@ public class StrUtil { * trim("abc") = "abc" * trim(" abc ") = "abc" *- * + * * @param str 要处理的字符串 - * * @return 除去头尾空白的字符串,如果原字串为
null
,则返回null
*/
public static String trim(CharSequence str) {
@@ -420,7 +423,7 @@ public class StrUtil {
/**
* 给定字符串数组全部做去首尾空格
- *
+ *
* @param strs 字符串数组
*/
public static void trim(String[] strs) {
@@ -477,10 +480,10 @@ public class StrUtil {
/**
* 除去字符串头部的空白,如果字符串是null
,则返回null
。
- *
+ *
*
* 注意,和String.trim
不同,此方法使用CharUtil.isBlankChar
来判定空白, 因而可以除去英文字符集之外的其它空白,如中文空格。
- *
+ *
*
* trimStart(null) = null * trimStart("") = "" @@ -489,9 +492,8 @@ public class StrUtil { * trimStart("abc ") = "abc " * trimStart(" abc ") = "abc " *- * + * * @param str 要处理的字符串 - * * @return 除去空白的字符串,如果原字串为
null
或结果字符串为""
,则返回 null
*/
public static String trimStart(CharSequence str) {
@@ -500,10 +502,10 @@ public class StrUtil {
/**
* 除去字符串尾部的空白,如果字符串是null
,则返回null
。
- *
+ *
*
* 注意,和String.trim
不同,此方法使用CharUtil.isBlankChar
来判定空白, 因而可以除去英文字符集之外的其它空白,如中文空格。
- *
+ *
*
* trimEnd(null) = null * trimEnd("") = "" @@ -512,9 +514,8 @@ public class StrUtil { * trimEnd("abc ") = "abc" * trimEnd(" abc ") = " abc" *- * + * * @param str 要处理的字符串 - * * @return 除去空白的字符串,如果原字串为
null
或结果字符串为""
,则返回 null
*/
public static String trimEnd(CharSequence str) {
@@ -523,10 +524,9 @@ public class StrUtil {
/**
* 除去字符串头尾部的空白符,如果字符串是null
,依然返回null
。
- *
- * @param str 要处理的字符串
+ *
+ * @param str 要处理的字符串
* @param mode -1
表示trimStart,0
表示trim全部, 1
表示trimEnd
- *
* @return 除去指定字符后的的字符串,如果原字串为null
,则返回null
*/
public static String trim(CharSequence str, int mode) {
@@ -561,9 +561,9 @@ public class StrUtil {
/**
* 字符串是否以给定字符开始
- *
+ *
* @param str 字符串
- * @param c 字符
+ * @param c 字符
* @return 是否开始
*/
public static boolean startWith(CharSequence str, char c) {
@@ -573,9 +573,9 @@ public class StrUtil {
/**
* 是否以指定字符串开头null
,返回true
- *
- * @param str 被检测字符串
+ *
+ * @param str 被检测字符串
* @param testStr 被测试是否包含的字符串
* @return 是否包含
*/
@@ -853,8 +853,8 @@ public class StrUtil {
/**
* 查找指定字符串是否包含指定字符串列表中的任意一个字符串* getName =》name * setName =》name * isName =》name *- * + * * @param getOrSetMethodName Get或Set方法名 * @return 如果是set或get方法名,返回field, 否则null */ @@ -901,7 +901,7 @@ public class StrUtil { final String getOrSetMethodNameStr = getOrSetMethodName.toString(); if (getOrSetMethodNameStr.startsWith("get") || getOrSetMethodNameStr.startsWith("set")) { return removePreAndLowerFirst(getOrSetMethodName, 3); - } else if(getOrSetMethodNameStr.startsWith("is")) { + } else if (getOrSetMethodNameStr.startsWith("is")) { return removePreAndLowerFirst(getOrSetMethodName, 2); } return null; @@ -910,7 +910,7 @@ public class StrUtil { /** * 生成set方法名
* 1. \r * 1. \n *- * + * * @param str 字符串 * @return 处理后的字符串 * @since 4.2.2 @@ -989,8 +989,8 @@ public class StrUtil { /** * 去掉首部指定长度的字符串并将剩余字符串首字母小写
* StrUtil.subSufByLength("abcde", 3) = "cde" * StrUtil.subSufByLength("abcde", 0) = "" @@ -1705,7 +1706,7 @@ public class StrUtil { * StrUtil.subSufByLength("abcde", 10) = "abcde" * StrUtil.subSufByLength(null, 3) = null *- * + * * @param string 字符串 * @param length 切割长度 * @return 切割后后剩余的后半部分字符串 @@ -1724,10 +1725,10 @@ public class StrUtil { /** * 截取字符串,从指定位置开始,截取指定长度的字符串
* StrUtil.subBefore(null, *) = null * StrUtil.subBefore("", *) = "" @@ -1749,9 +1750,9 @@ public class StrUtil { * StrUtil.subBefore("abc", "") = "" * StrUtil.subBefore("abc", null) = "abc" *- * - * @param string 被查找的字符串 - * @param separator 分隔字符串(不包括) + * + * @param string 被查找的字符串 + * @param separator 分隔字符串(不包括) * @param isLastSeparator 是否查找最后一个分隔字符串(多次出现分隔字符串时选取最后一个),true为选取最后一个 * @return 切割后的字符串 * @since 3.1.1 @@ -1780,7 +1781,7 @@ public class StrUtil { * 截取分隔字符串之前的字符串,不包括分隔字符串
* StrUtil.subBefore(null, *) = null * StrUtil.subBefore("", *) = "" @@ -1789,9 +1790,9 @@ public class StrUtil { * StrUtil.subBefore("abc", 'c') = "ab" * StrUtil.subBefore("abc", 'd') = "abc" *- * - * @param string 被查找的字符串 - * @param separator 分隔字符串(不包括) + * + * @param string 被查找的字符串 + * @param separator 分隔字符串(不包括) * @param isLastSeparator 是否查找最后一个分隔字符串(多次出现分隔字符串时选取最后一个),true为选取最后一个 * @return 切割后的字符串 * @since 4.1.15 @@ -1828,8 +1829,8 @@ public class StrUtil { * StrUtil.subAfter("abc", "") = "abc" * * - * @param string 被查找的字符串 - * @param separator 分隔字符串(不包括) + * @param string 被查找的字符串 + * @param separator 分隔字符串(不包括) * @param isLastSeparator 是否查找最后一个分隔字符串(多次出现分隔字符串时选取最后一个),true为选取最后一个 * @return 切割后的字符串 * @since 3.1.1 @@ -1864,8 +1865,8 @@ public class StrUtil { * StrUtil.subAfter("abc", 'd') = "" * * - * @param string 被查找的字符串 - * @param separator 分隔字符串(不包括) + * @param string 被查找的字符串 + * @param separator 分隔字符串(不包括) * @param isLastSeparator 是否查找最后一个分隔字符串(多次出现分隔字符串时选取最后一个),true为选取最后一个 * @return 切割后的字符串 * @since 4.1.15 @@ -1884,9 +1885,9 @@ public class StrUtil { /** * 截取指定字符串中间部分,不包括标识字符串
* 栗子: - * + * *
* StrUtil.subBetween("wx[b]yz", "[", "]") = "b" * StrUtil.subBetween(null, *, *) = null @@ -1899,10 +1900,10 @@ public class StrUtil { * StrUtil.subBetween("yabcz", "y", "z") = "abc" * StrUtil.subBetween("yabczyabcz", "y", "z") = "abc" *- * - * @param str 被切割的字符串 + * + * @param str 被切割的字符串 * @param before 截取开始的字符串标识 - * @param after 截取到的字符串标识 + * @param after 截取到的字符串标识 * @return 截取后的字符串 * @since 3.1.1 */ @@ -1927,9 +1928,9 @@ public class StrUtil { /** * 截取指定字符串中间部分,不包括标识字符串
* 栗子: - * + * *
* StrUtil.subBetween(null, *) = null * StrUtil.subBetween("", "") = "" @@ -1938,8 +1939,8 @@ public class StrUtil { * StrUtil.subBetween("tagabctag", "") = "" * StrUtil.subBetween("tagabctag", "tag") = "abc" *- * - * @param str 被切割的字符串 + * + * @param str 被切割的字符串 * @param beforeAndAfter 截取开始和结束的字符串标识 * @return 截取后的字符串 * @since 3.1.1 @@ -1950,7 +1951,7 @@ public class StrUtil { /** * 截取指定字符串多段中间部分,不包括标识字符串
* 栗子: * *
@@ -1967,46 +1968,44 @@ public class StrUtil { * StrUtil.subBetweenAll("[yabc[zy]abcz]", "[", "]"); = ["zy"] 重叠时只截取内部, ** - * @param str 被切割的字符串 - * @param regexBefore 截取开始的字符串标识 - * @param regexAfter 截取到的字符串标识 + * @param str 被切割的字符串 + * @param prefix 截取开始的字符串标识 + * @param suffix 截取到的字符串标识 * @return 截取后的字符串 * @author dahuoyzs * @since 5.2.5 */ - public static String[] subBetweenAll(CharSequence str, CharSequence regexBefore, CharSequence regexAfter) { - if (str == null || regexBefore == null || regexAfter == null || str.length() < 1 || regexBefore.length() < 1 || regexAfter.length() < 1) { + public static String[] subBetweenAll(CharSequence str, CharSequence prefix, CharSequence suffix) { + if(hasEmpty(str, prefix, suffix)) { return new String[0]; } - final String before = regexBefore.toString().replace("\\", ""); - final String after = regexAfter.toString().replace("\\", ""); - final Integer beforeNumber = StrUtil.count(str, before); - final Integer afterNumber = StrUtil.count(str, after); - if (beforeNumber<1||afterNumber<1){ + final int prefixCount = count(str, prefix); + final int suffixCount = count(str, suffix); + if (prefixCount < 1 || suffixCount < 1) { return new String[0]; } LinkedList
* StrUtil.repeatAndJoin("?", 5, ",") = "?,?,?,?,?" * StrUtil.repeatAndJoin("?", 0, ",") = "" * StrUtil.repeatAndJoin("?", 5, null) = "?????" *- * - * @param str 被重复的字符串 - * @param count 数量 + * + * @param str 被重复的字符串 + * @param count 数量 * @param conjunction 分界符 * @return 连接后的字符串 * @since 4.0.1 @@ -2173,7 +2172,7 @@ public class StrUtil { /** * 比较两个字符串(大小写敏感)。 - * + * *
* equals(null, null) = true * equals(null, "abc") = false @@ -2181,10 +2180,9 @@ public class StrUtil { * equals("abc", "abc") = true * equals("abc", "ABC") = false *- * + * * @param str1 要比较的字符串1 * @param str2 要比较的字符串2 - * * @return 如果两个字符串相同,或者都是
null
,则返回true
*/
public static boolean equals(CharSequence str1, CharSequence str2) {
@@ -2193,7 +2191,7 @@ public class StrUtil {
/**
* 比较两个字符串(大小写不敏感)。
- *
+ *
* * equalsIgnoreCase(null, null) = true * equalsIgnoreCase(null, "abc") = false @@ -2201,10 +2199,9 @@ public class StrUtil { * equalsIgnoreCase("abc", "abc") = true * equalsIgnoreCase("abc", "ABC") = true *- * + * * @param str1 要比较的字符串1 * @param str2 要比较的字符串2 - * * @return 如果两个字符串相同,或者都是
null
,则返回true
*/
public static boolean equalsIgnoreCase(CharSequence str1, CharSequence str2) {
@@ -2213,9 +2210,9 @@ public class StrUtil {
/**
* 比较两个字符串是否相等。
- *
- * @param str1 要比较的字符串1
- * @param str2 要比较的字符串2
+ *
+ * @param str1 要比较的字符串1
+ * @param str2 要比较的字符串2
* @param ignoreCase 是否忽略大小写
* @return 如果两个字符串相同,或者都是null
,则返回true
* @since 3.2.0
@@ -2240,7 +2237,7 @@ public class StrUtil {
/**
* 给定字符串是否与提供的中任一字符串相同(忽略大小写),相同则返回{@code true},没有相同的返回{@code false}* HelloWorld=》hello_world * Hello_World=》hello_world @@ -2606,7 +2602,7 @@ public class StrUtil { /** * 将驼峰式命名的字符串转换为使用符号连接方式。如果转换前的驼峰式命名的字符串为空,则返回空字符串。* - * @param content 被查找的字符串 + * @param content 被查找的字符串 * @param strForSearch 需要查找的字符串 * @return 查找到的个数 */ @@ -3232,8 +3228,8 @@ public class StrUtil { /** * 统计指定内容中包含指定字符的数量 - * - * @param content 内容 + * + * @param content 内容 * @param charForSearch 被统计的字符 * @return 包含数量 */ @@ -3253,8 +3249,8 @@ public class StrUtil { /** * 将字符串切分为N等份 - * - * @param str 字符串 + * + * @param str 字符串 * @param partLength 每等份的长度 * @return 切分后的数组 * @since 3.0.6 @@ -3265,7 +3261,7 @@ public class StrUtil { } int len = str.length(); if (len < partLength) { - return new String[] { str.toString() }; + return new String[]{str.toString()}; } int part = NumberUtil.count(len, partLength); final String[] array = new String[part]; @@ -3279,8 +3275,8 @@ public class StrUtil { /** * 将给定字符串,变成 "xxx...xxx" 形式的字符串 - * - * @param str 字符串 + * + * @param str 字符串 * @param maxLength 最大长度 * @return 截取后的字符串 */ @@ -3300,7 +3296,7 @@ public class StrUtil { /** * 比较两个字符串,用于排序 - * + * *
* - * @param str 转换前的驼峰式命名的字符串,也可以为符号连接形式 + * @param str 转换前的驼峰式命名的字符串,也可以为符号连接形式 * @param symbol 连接符 * @return 转换后符号连接方式命名的字符串 * @since 4.0.10 @@ -2692,8 +2688,8 @@ public class StrUtil { /** * 包装指定字符串
* 当前缀和后缀一致时使用此方法 - * - * @param str 被包装的字符串 + * + * @param str 被包装的字符串 * @param prefixAndSuffix 前缀和后缀 * @return 包装后的字符串 * @since 3.1.0 @@ -2704,8 +2700,8 @@ public class StrUtil { /** * 包装指定字符串 - * - * @param str 被包装的字符串 + * + * @param str 被包装的字符串 * @param prefix 前缀 * @param suffix 后缀 * @return 包装后的字符串 @@ -2716,9 +2712,9 @@ public class StrUtil { /** * 包装多个字符串 - * + * * @param prefixAndSuffix 前缀和后缀 - * @param strs 多个字符串 + * @param strs 多个字符串 * @return 包装的字符串数组 * @since 4.0.7 */ @@ -2728,10 +2724,10 @@ public class StrUtil { /** * 包装多个字符串 - * + * * @param prefix 前缀 * @param suffix 后缀 - * @param strs 多个字符串 + * @param strs 多个字符串 * @return 包装的字符串数组 * @since 4.0.7 */ @@ -2745,8 +2741,8 @@ public class StrUtil { /** * 包装指定字符串,如果前缀或后缀已经包含对应的字符串,则不再包装 - * - * @param str 被包装的字符串 + * + * @param str 被包装的字符串 * @param prefix 前缀 * @param suffix 后缀 * @return 包装后的字符串 @@ -2777,9 +2773,9 @@ public class StrUtil { /** * 包装多个字符串,如果已经包装,则不再包装 - * + * * @param prefixAndSuffix 前缀和后缀 - * @param strs 多个字符串 + * @param strs 多个字符串 * @return 包装的字符串数组 * @since 4.0.7 */ @@ -2789,10 +2785,10 @@ public class StrUtil { /** * 包装多个字符串,如果已经包装,则不再包装 - * + * * @param prefix 前缀 * @param suffix 后缀 - * @param strs 多个字符串 + * @param strs 多个字符串 * @return 包装的字符串数组 * @since 4.0.7 */ @@ -2806,8 +2802,8 @@ public class StrUtil { /** * 去掉字符包装,如果未被包装则返回原字符串 - * - * @param str 字符串 + * + * @param str 字符串 * @param prefix 前置字符串 * @param suffix 后置字符串 * @return 去掉包装字符的字符串 @@ -2822,8 +2818,8 @@ public class StrUtil { /** * 去掉字符包装,如果未被包装则返回原字符串 - * - * @param str 字符串 + * + * @param str 字符串 * @param prefix 前置字符 * @param suffix 后置字符 * @return 去掉包装字符的字符串 @@ -2841,8 +2837,8 @@ public class StrUtil { /** * 去掉字符包装,如果未被包装则返回原字符串 - * - * @param str 字符串 + * + * @param str 字符串 * @param prefixAndSuffix 前置和后置字符 * @return 去掉包装字符的字符串 * @since 4.0.1 @@ -2853,8 +2849,8 @@ public class StrUtil { /** * 指定字符串是否被包装 - * - * @param str 字符串 + * + * @param str 字符串 * @param prefix 前缀 * @param suffix 后缀 * @return 是否被包装 @@ -2869,8 +2865,8 @@ public class StrUtil { /** * 指定字符串是否被同一字符包装(前后都有这些字符串) - * - * @param str 字符串 + * + * @param str 字符串 * @param wrapper 包装字符串 * @return 是否被包装 */ @@ -2880,8 +2876,8 @@ public class StrUtil { /** * 指定字符串是否被同一字符包装(前后都有这些字符串) - * - * @param str 字符串 + * + * @param str 字符串 * @param wrapper 包装字符 * @return 是否被包装 */ @@ -2891,8 +2887,8 @@ public class StrUtil { /** * 指定字符串是否被包装 - * - * @param str 字符串 + * + * @param str 字符串 * @param prefixChar 前缀 * @param suffixChar 后缀 * @return 是否被包装 @@ -2907,16 +2903,16 @@ public class StrUtil { /** * 补充字符串以满足最小长度 - * + * ** StrUtil.padPre(null, *, *);//null * StrUtil.padPre("1", 3, "ABC");//"AB1" * StrUtil.padPre("123", 2, "ABC");//"12" *- * - * @param str 字符串 + * + * @param str 字符串 * @param minLength 最小长度 - * @param padStr 补充的字符 + * @param padStr 补充的字符 * @return 补充后的字符串 */ public static String padPre(CharSequence str, int minLength, CharSequence padStr) { @@ -2935,16 +2931,16 @@ public class StrUtil { /** * 补充字符串以满足最小长度 - * + * ** StrUtil.padPre(null, *, *);//null * StrUtil.padPre("1", 3, '0');//"001" * StrUtil.padPre("123", 2, '0');//"12" *- * - * @param str 字符串 + * + * @param str 字符串 * @param minLength 最小长度 - * @param padChar 补充的字符 + * @param padChar 补充的字符 * @return 补充后的字符串 */ public static String padPre(CharSequence str, int minLength, char padChar) { @@ -2963,16 +2959,16 @@ public class StrUtil { /** * 补充字符串以满足最小长度 - * + * ** StrUtil.padAfter(null, *, *);//null * StrUtil.padAfter("1", 3, '0');//"100" * StrUtil.padAfter("123", 2, '0');//"23" *- * - * @param str 字符串,如果为null
,按照空串处理 + * + * @param str 字符串,如果为null
,按照空串处理 * @param minLength 最小长度 - * @param padChar 补充的字符 + * @param padChar 补充的字符 * @return 补充后的字符串 */ public static String padAfter(CharSequence str, int minLength, char padChar) { @@ -2991,16 +2987,16 @@ public class StrUtil { /** * 补充字符串以满足最小长度 - * + * ** StrUtil.padAfter(null, *, *);//null * StrUtil.padAfter("1", 3, "ABC");//"1AB" * StrUtil.padAfter("123", 2, "ABC");//"23" *- * - * @param str 字符串,如果为null
,按照空串处理 + * + * @param str 字符串,如果为null
,按照空串处理 * @param minLength 最小长度 - * @param padStr 补充的字符 + * @param padStr 补充的字符 * @return 补充后的字符串 * @since 4.3.2 */ @@ -3020,7 +3016,7 @@ public class StrUtil { /** * 居中字符串,两边补充指定字符串,如果指定长度小于字符串,则返回原字符串 - * + * ** StrUtil.center(null, *) = null * StrUtil.center("", 4) = " " @@ -3030,7 +3026,7 @@ public class StrUtil { * StrUtil.center("a", 4) = " a " ** - * @param str 字符串 + * @param str 字符串 * @param size 指定长度 * @return 补充后的字符串 * @since 4.3.2 @@ -3041,7 +3037,7 @@ public class StrUtil { /** * 居中字符串,两边补充指定字符串,如果指定长度小于字符串,则返回原字符串 - * + * ** StrUtil.center(null, *, *) = null * StrUtil.center("", 4, ' ') = " " @@ -3053,8 +3049,8 @@ public class StrUtil { * StrUtil.center("abc", 7, ' ') = " abc " ** - * @param str 字符串 - * @param size 指定长度 + * @param str 字符串 + * @param size 指定长度 * @param padChar 两边补充的字符 * @return 补充后的字符串 * @since 4.3.2 @@ -3075,7 +3071,7 @@ public class StrUtil { /** * 居中字符串,两边补充指定字符串,如果指定长度小于字符串,则返回原字符串 - * + * ** StrUtil.center(null, *, *) = null * StrUtil.center("", 4, " ") = " " @@ -3088,8 +3084,8 @@ public class StrUtil { * StrUtil.center("abc", 7, "") = " abc " ** - * @param str 字符串 - * @param size 指定长度 + * @param str 字符串 + * @param size 指定长度 * @param padStr 两边补充的字符串 * @return 补充后的字符串 */ @@ -3112,7 +3108,7 @@ public class StrUtil { /** * 创建StringBuilder对象 - * + * * @return StringBuilder对象 */ public static StringBuilder builder() { @@ -3121,7 +3117,7 @@ public class StrUtil { /** * 创建StrBuilder对象 - * + * * @return StrBuilder对象 * @since 4.0.1 */ @@ -3131,7 +3127,7 @@ public class StrUtil { /** * 创建StringBuilder对象 - * + * * @param capacity 初始大小 * @return StringBuilder对象 */ @@ -3141,7 +3137,7 @@ public class StrUtil { /** * 创建StrBuilder对象 - * + * * @param capacity 初始大小 * @return StrBuilder对象 * @since 4.0.1 @@ -3152,7 +3148,7 @@ public class StrUtil { /** * 创建StringBuilder对象 - * + * * @param strs 初始字符串列表 * @return StringBuilder对象 */ @@ -3166,7 +3162,7 @@ public class StrUtil { /** * 创建StrBuilder对象 - * + * * @param strs 初始字符串列表 * @return StrBuilder对象 */ @@ -3176,7 +3172,7 @@ public class StrUtil { /** * 获得StringReader - * + * * @param str 字符串 * @return StringReader */ @@ -3189,7 +3185,7 @@ public class StrUtil { /** * 获得StringWriter - * + * * @return StringWriter */ public static StringWriter getWriter() { @@ -3210,7 +3206,7 @@ public class StrUtil { * StrUtil.count("abba", "xxx") = 0 *
* StrUtil.compare(null, null, *) = 0 * StrUtil.compare(null , "a", true) < 0 @@ -3313,9 +3309,9 @@ public class StrUtil { * StrUtil.compare("a", "B", *) > 0 * StrUtil.compare("ab", "abc", *) < 0 *- * - * @param str1 字符串1 - * @param str2 字符串2 + * + * @param str1 字符串1 + * @param str2 字符串2 * @param nullIsLess {@code null} 值是否排在前(null是否小于非空值) * @return 排序值。负数:str1 < str2,正数:str1 > str2, 0:str1 == str2 */ @@ -3334,7 +3330,7 @@ public class StrUtil { /** * 比较两个字符串,用于排序,大小写不敏感 - * + * *
* StrUtil.compareIgnoreCase(null, null, *) = 0 * StrUtil.compareIgnoreCase(null , "a", true) < 0 @@ -3349,9 +3345,9 @@ public class StrUtil { * StrUtil.compareIgnoreCase("A", "b", *) < 0 * StrUtil.compareIgnoreCase("ab", "abc", *) < 0 *- * - * @param str1 字符串1 - * @param str2 字符串2 + * + * @param str1 字符串1 + * @param str2 字符串2 * @param nullIsLess {@code null} 值是否排在前(null是否小于非空值) * @return 排序值。负数:str1 < str2,正数:str1 > str2, 0:str1 == str2 */ @@ -3371,7 +3367,7 @@ public class StrUtil { /** * 比较两个版本
* StrUtil.compareVersion(null, "v1") < 0 * StrUtil.compareVersion("v1", "v1") = 0 @@ -3382,7 +3378,7 @@ public class StrUtil { * StrUtil.compareVersion("1.13.0", "1.12.1c") > 0 * StrUtil.compareVersion("V0.0.20170102", "V0.0.20170101") > 0 *- * + * * @param version1 版本1 * @param version2 版本2 * @return 排序值。负数:version1 < version2,正数:version1 > version2, 0:version1 == version2 @@ -3394,8 +3390,8 @@ public class StrUtil { /** * 指定范围内查找指定字符 - * - * @param str 字符串 + * + * @param str 字符串 * @param searchChar 被查找的字符 * @return 位置 */ @@ -3405,10 +3401,10 @@ public class StrUtil { /** * 指定范围内查找指定字符 - * - * @param str 字符串 + * + * @param str 字符串 * @param searchChar 被查找的字符 - * @param start 起始位置,如果小于0,从0开始查找 + * @param start 起始位置,如果小于0,从0开始查找 * @return 位置 */ public static int indexOf(final CharSequence str, char searchChar, int start) { @@ -3421,11 +3417,11 @@ public class StrUtil { /** * 指定范围内查找指定字符 - * - * @param str 字符串 + * + * @param str 字符串 * @param searchChar 被查找的字符 - * @param start 起始位置,如果小于0,从0开始查找 - * @param end 终止位置,如果超过str.length()则默认查找到字符串末尾 + * @param start 起始位置,如果小于0,从0开始查找 + * @param end 终止位置,如果超过str.length()则默认查找到字符串末尾 * @return 位置 */ public static int indexOf(final CharSequence str, char searchChar, int start, int end) { @@ -3446,7 +3442,7 @@ public class StrUtil { /** * 指定范围内查找字符串,忽略大小写
* StrUtil.indexOfIgnoreCase(null, *, *) = -1 * StrUtil.indexOfIgnoreCase(*, null, *) = -1 @@ -3460,8 +3456,8 @@ public class StrUtil { * StrUtil.indexOfIgnoreCase("aabaabaa", "", 2) = 2 * StrUtil.indexOfIgnoreCase("abc", "", 9) = -1 *- * - * @param str 字符串 + * + * @param str 字符串 * @param searchStr 需要查找位置的字符串 * @return 位置 * @since 3.2.1 @@ -3472,7 +3468,7 @@ public class StrUtil { /** * 指定范围内查找字符串 - * + * *
* StrUtil.indexOfIgnoreCase(null, *, *) = -1 * StrUtil.indexOfIgnoreCase(*, null, *) = -1 @@ -3486,8 +3482,8 @@ public class StrUtil { * StrUtil.indexOfIgnoreCase("aabaabaa", "", 2) = 2 * StrUtil.indexOfIgnoreCase("abc", "", 9) = -1 *- * - * @param str 字符串 + * + * @param str 字符串 * @param searchStr 需要查找位置的字符串 * @param fromIndex 起始位置 * @return 位置 @@ -3499,10 +3495,10 @@ public class StrUtil { /** * 指定范围内查找字符串 - * - * @param str 字符串 - * @param searchStr 需要查找位置的字符串 - * @param fromIndex 起始位置 + * + * @param str 字符串 + * @param searchStr 需要查找位置的字符串 + * @param fromIndex 起始位置 * @param ignoreCase 是否忽略大小写 * @return 位置 * @since 3.2.1 @@ -3538,8 +3534,8 @@ public class StrUtil { /** * 指定范围内查找字符串,忽略大小写 - * - * @param str 字符串 + * + * @param str 字符串 * @param searchStr 需要查找位置的字符串 * @return 位置 * @since 3.2.1 @@ -3551,8 +3547,8 @@ public class StrUtil { /** * 指定范围内查找字符串,忽略大小写
* 如果 str=null 或 searchStr=null 或 ordinal≥0 则返回-1
* 此方法来自:Apache-Commons-Lang
- *
+ *
* 例子(*代表任意字符): - * + * *
* StrUtil.ordinalIndexOf(null, *, *) = -1 * StrUtil.ordinalIndexOf(*, null, *) = -1 @@ -3622,9 +3618,9 @@ public class StrUtil { * StrUtil.ordinalIndexOf("aabaabaa", "", 2) = 0 ** - * @param str 被检查的字符串,可以为null + * @param str 被检查的字符串,可以为null * @param searchStr 被查找的字符串,可以为null - * @param ordinal 第几次出现的位置 + * @param ordinal 第几次出现的位置 * @return 查找到的位置 * @since 3.2.3 */ @@ -3648,14 +3644,14 @@ public class StrUtil { } // ------------------------------------------------------------------------------------------------------------------ Append and prepend + /** * 如果给定字符串不是以给定的一个或多个字符串为结尾,则在尾部添加结尾字符串
* 1. 大写字母包括A-Z * 2. 其它非字母的Unicode符都算作大写 *- * + * * @param str 被检查的字符串 * @return 是否全部为大写 * @since 4.2.2 @@ -4223,12 +4214,12 @@ public class StrUtil { /** * 给定字符串中的字母是否全部为小写,判断依据如下: - * + * *
* 1. 小写字母包括a-z * 2. 其它非字母的Unicode符都算作小写 *- * + * * @param str 被检查的字符串 * @return 是否全部为小写 * @since 4.2.2 @@ -4256,11 +4247,11 @@ public class StrUtil { public static int length(CharSequence cs) { return cs == null ? 0 : cs.length(); } - + /** * 给定字符串转为bytes后的byte数(byte长度) - * - * @param cs 字符串 + * + * @param cs 字符串 * @param charset 编码 * @return byte长度 * @since 4.5.2 diff --git a/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java index f0fd31419..6e3a41fde 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java @@ -424,8 +424,8 @@ public class StrUtilTest { @Test public void subBetweenAllTest() { - Assert.assertArrayEquals(new String[]{"yz","abc"},StrUtil.subBetweenAll("saho[yz]fdsadp[abc]a","\\[","\\]")); - Assert.assertArrayEquals(new String[]{"abc"}, StrUtil.subBetweenAll("saho[yzfdsadp[abc]a]","\\[","\\]")); + Assert.assertArrayEquals(new String[]{"yz","abc"},StrUtil.subBetweenAll("saho[yz]fdsadp[abc]a","[","]")); + Assert.assertArrayEquals(new String[]{"abc"}, StrUtil.subBetweenAll("saho[yzfdsadp[abc]a]","[","]")); } }