diff --git a/CHANGELOG.md b/CHANGELOG.md index 78d7e7d36..0409fc700 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.7.19 (2022-01-05) +# 5.7.19 (2022-01-06) ### 🐣新特性 * 【db 】 优化Condition参数拆分(pr#2046@Github) @@ -22,6 +22,7 @@ * 【http 】 修复HttpRequest.of无法自动添加http前缀问题(issue#I4PEYL@Gitee) * 【core 】 修复 `CharSequenceUtil.brief(str, maxLength)` 方法字符串越界问题,以及 `maxLength` 部分值时结果与预期不符的问题(pr#2068@Github) * 【core 】 修复NamingCase中转换下划线字母+数字转换问题(issue#2070@Github) +* 【core 】 修复split空判断不一致问题(pr#496@Gitee) ------------------------------------------------------------------------------------------------------------- # 5.7.18 (2021-12-25) diff --git a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java index bfefd2779..2b84f1463 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java @@ -22,7 +22,6 @@ import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.text.MessageFormat; import java.text.Normalizer; -import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedList; import java.util.List; @@ -1803,10 +1802,7 @@ public class CharSequenceUtil { * @since 5.7.14 */ public static List split(CharSequence str, char separator, int limit, boolean ignoreEmpty, Function mapping) { - if (null == str) { - return new ArrayList<>(0); - } - return StrSplitter.split(str.toString(), separator, limit, ignoreEmpty, mapping); + return StrSplitter.split(str, separator, limit, ignoreEmpty, mapping); } /** @@ -1847,11 +1843,8 @@ public class CharSequenceUtil { * @since 3.2.0 */ public static List split(CharSequence str, CharSequence separator, int limit, boolean isTrim, boolean ignoreEmpty) { - if (null == str) { - return new ArrayList<>(0); - } final String separatorStr = (null == separator) ? null : separator.toString(); - return StrSplitter.split(str.toString(), separatorStr, limit, isTrim, ignoreEmpty); + return StrSplitter.split(str, separatorStr, limit, isTrim, ignoreEmpty); } /** @@ -1860,13 +1853,10 @@ public class CharSequenceUtil { * @param str 字符串 * @param len 每一个小节的长度 * @return 截取后的字符串数组 - * @see StrSplitter#splitByLength(String, int) + * @see StrSplitter#splitByLength(CharSequence, int) */ public static String[] split(CharSequence str, int len) { - if (null == str) { - return new String[]{}; - } - return StrSplitter.splitByLength(str.toString(), len); + return StrSplitter.splitByLength(str, len); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/text/StrSplitter.java b/hutool-core/src/main/java/cn/hutool/core/text/StrSplitter.java index bcf317c01..ce9d998d7 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/StrSplitter.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/StrSplitter.java @@ -1,6 +1,5 @@ package cn.hutool.core.text; -import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.PatternPool; import cn.hutool.core.text.finder.CharFinder; import cn.hutool.core.text.finder.CharMatcherFinder; @@ -12,14 +11,12 @@ import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.StrUtil; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.function.Function; import java.util.regex.Pattern; /** * 字符串切分器,封装统一的字符串分割静态方法 - * * @author Looly * @since 5.7.0 */ @@ -176,7 +173,7 @@ public class StrSplitter { } /** - * 切分字符串 + * 切分字符串
* 如果为空字符串或者null 则返回空集合 * * @param 切分后的元素类型 @@ -191,8 +188,8 @@ public class StrSplitter { */ public static List split(CharSequence text, char separator, int limit, boolean ignoreEmpty, boolean ignoreCase, Function mapping) { - if (StrUtil.isBlank(text)) { - return Collections.emptyList(); + if (null == text) { + return new ArrayList<>(0); } final SplitIter splitIter = new SplitIter(text, new CharFinder(separator, ignoreCase), limit, ignoreEmpty); return splitIter.toList(mapping); @@ -301,7 +298,8 @@ public class StrSplitter { } /** - * 切分字符串 + * 切分字符串
+ * 如果为空字符串或者null 则返回空集合 * * @param text 被切分的字符串 * @param separator 分隔符字符串 @@ -313,6 +311,9 @@ public class StrSplitter { * @since 3.2.1 */ public static List split(CharSequence text, String separator, int limit, boolean isTrim, boolean ignoreEmpty, boolean ignoreCase) { + if (null == text) { + return new ArrayList<>(0); + } final SplitIter splitIter = new SplitIter(text, new StrFinder(separator, ignoreCase), limit, ignoreEmpty); return splitIter.toList(isTrim); } @@ -336,7 +337,8 @@ public class StrSplitter { /** * 使用空白符切分字符串
- * 切分后的字符串两边不包含空白符,空串或空白符串并不做为元素之一 + * 切分后的字符串两边不包含空白符,空串或空白符串并不做为元素之一
+ * 如果为空字符串或者null 则返回空集合 * * @param text 被切分的字符串 * @param limit 限制分片数 @@ -344,8 +346,7 @@ public class StrSplitter { * @since 3.0.8 */ public static List split(CharSequence text, int limit) { - - if (StrUtil.isEmpty(text)) { + if (null == text) { return new ArrayList<>(0); } final SplitIter splitIter = new SplitIter(text, new CharMatcherFinder(CharUtil::isBlankChar), limit, true); @@ -382,7 +383,8 @@ public class StrSplitter { } /** - * 通过正则切分字符串 + * 通过正则切分字符串
+ * 如果为空字符串或者null 则返回空集合 * * @param text 字符串 * @param separatorPattern 分隔符正则{@link Pattern} @@ -393,8 +395,7 @@ public class StrSplitter { * @since 3.0.8 */ public static List split(String text, Pattern separatorPattern, int limit, boolean isTrim, boolean ignoreEmpty) { - Assert.notNull(text, "Text must be not null!"); - if (text.length() < 1) { + if (null == text) { return new ArrayList<>(0); } final SplitIter splitIter = new SplitIter(text, new PatternFinder(separatorPattern), limit, ignoreEmpty); @@ -424,7 +425,10 @@ public class StrSplitter { * @param len 每一个小节的长度 * @return 截取后的字符串数组 */ - public static String[] splitByLength(String text, int len) { + public static String[] splitByLength(CharSequence text, int len) { + if (null == text) { + return new String[0]; + } SplitIter splitIter = new SplitIter(text, new LengthFinder(len), -1, false); return splitIter.toArray(false); } diff --git a/hutool-core/src/main/java/cn/hutool/core/text/split/SplitIter.java b/hutool-core/src/main/java/cn/hutool/core/text/split/SplitIter.java index 5fbf800e4..6dc104800 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/split/SplitIter.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/split/SplitIter.java @@ -38,7 +38,7 @@ public class SplitIter extends ComputeIter implements Serializable { /** * 构造 * - * @param text 文本 + * @param text 文本,不能为{@code null} * @param separatorFinder 分隔符匹配器 * @param limit 限制数量,小于等于0表示无限制 * @param ignoreEmpty 是否忽略"" diff --git a/hutool-core/src/test/java/cn/hutool/core/text/split/StrSpliterTest.java b/hutool-core/src/test/java/cn/hutool/core/text/split/StrSpliterTest.java index 8f9d54caf..8458f70f6 100644 --- a/hutool-core/src/test/java/cn/hutool/core/text/split/StrSpliterTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/text/split/StrSpliterTest.java @@ -60,6 +60,15 @@ public class StrSpliterTest { String str = ""; final String[] split = str.split(","); final String[] strings = StrSplitter.splitToArray(str, ",", -1, false, false); + Assert.assertNotNull(strings); Assert.assertArrayEquals(split, strings); } + + @Test + public void splitNullTest(){ + String str = null; + final String[] strings = StrSplitter.splitToArray(str, ",", -1, false, false); + Assert.assertNotNull(strings); + Assert.assertEquals(0, strings.length); + } }