From b93796931379f4f2fa74ea54e0d02c387ef9396a Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 20 Oct 2021 12:34:26 +0800 Subject: [PATCH] fix bug --- CHANGELOG.md | 3 +- .../cn/hutool/core/text/CharSequenceUtil.java | 10 ++--- .../java/cn/hutool/core/text/StrSplitter.java | 39 ++++++++++--------- .../cn/hutool/core/text/split/SplitIter.java | 1 - .../java/cn/hutool/core/util/StrUtilTest.java | 10 +++++ 5 files changed, 37 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af022c29e..61d3f2573 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.7.15 (2021-10-19) +# 5.7.15 (2021-10-20) ### 🐣新特性 * 【db 】 Db.quietSetAutoCommit增加判空(issue#I4D75B@Gitee) @@ -20,6 +20,7 @@ * 【poi 】 修复sheet.getRow(y)为null导致的问题(issue#1893@Github) * 【cache 】 修复LRUCache线程安全问题(issue#1895@Github) * 【crypto 】 修复KeyUtil异常信息参数丢失问题(issue#1902@Github) +* 【core 】 修复StrUtil.split和splittoArray不一致问题(issue#I4ELU5@Github) ------------------------------------------------------------------------------------------------------------- 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 8c3974915..1a41d7282 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 @@ -1729,16 +1729,14 @@ public class CharSequenceUtil { /** * 切分字符串 * - * @param str 被切分的字符串 + * @param text 被切分的字符串 * @param separator 分隔符字符 * @param limit 限制分片数 * @return 切分后的数组 */ - public static String[] splitToArray(CharSequence str, char separator, int limit) { - if (null == str) { - return new String[]{}; - } - return StrSplitter.splitToArray(str.toString(), separator, limit, false, false); + public static String[] splitToArray(CharSequence text, char separator, int limit) { + Assert.notNull(text, "Text must be not null!"); + return StrSplitter.splitToArray(text.toString(), separator, limit, false, false); } /** 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 ec3d4aa45..d9333e61c 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,5 +1,6 @@ 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; @@ -146,7 +147,7 @@ public class StrSplitter { /** * 切分字符串,忽略大小写 * - * @param str 被切分的字符串 + * @param text 被切分的字符串 * @param separator 分隔符字符 * @param limit 限制分片数,-1不限制 * @param isTrim 是否去除切分字符串后每个元素两边的空格 @@ -154,8 +155,8 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.2.1 */ - public static List splitIgnoreCase(CharSequence str, char separator, int limit, boolean isTrim, boolean ignoreEmpty) { - return split(str, separator, limit, isTrim, ignoreEmpty, true); + public static List splitIgnoreCase(CharSequence text, char separator, int limit, boolean isTrim, boolean ignoreEmpty) { + return split(text, separator, limit, isTrim, ignoreEmpty, true); } /** @@ -177,7 +178,7 @@ public class StrSplitter { /** * 切分字符串 * - * @param 切分后的元素类型 + * @param 切分后的元素类型 * @param text 被切分的字符串 * @param separator 分隔符字符 * @param limit 限制分片数,-1不限制 @@ -204,7 +205,7 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.0.8 */ - public static String[] splitToArray(String str, char separator, int limit, boolean isTrim, boolean ignoreEmpty) { + public static String[] splitToArray(CharSequence str, char separator, int limit, boolean isTrim, boolean ignoreEmpty) { return toArray(split(str, separator, limit, isTrim, ignoreEmpty)); } @@ -220,7 +221,7 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.0.8 */ - public static List split(String str, String separator, boolean isTrim, boolean ignoreEmpty) { + public static List split(CharSequence str, String separator, boolean isTrim, boolean ignoreEmpty) { return split(str, separator, -1, isTrim, ignoreEmpty, false); } @@ -233,7 +234,7 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.2.1 */ - public static List splitTrim(String str, String separator, boolean ignoreEmpty) { + public static List splitTrim(CharSequence str, String separator, boolean ignoreEmpty) { return split(str, separator, true, ignoreEmpty); } @@ -248,7 +249,7 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.0.8 */ - public static List split(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) { + public static List split(CharSequence str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) { return split(str, separator, limit, isTrim, ignoreEmpty, false); } @@ -262,7 +263,7 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.2.1 */ - public static List splitTrim(String str, String separator, int limit, boolean ignoreEmpty) { + public static List splitTrim(CharSequence str, String separator, int limit, boolean ignoreEmpty) { return split(str, separator, limit, true, ignoreEmpty); } @@ -277,7 +278,7 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.2.1 */ - public static List splitIgnoreCase(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) { + public static List splitIgnoreCase(CharSequence str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) { return split(str, separator, limit, isTrim, ignoreEmpty, true); } @@ -291,7 +292,7 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.2.1 */ - public static List splitTrimIgnoreCase(String str, String separator, int limit, boolean ignoreEmpty) { + public static List splitTrimIgnoreCase(CharSequence str, String separator, int limit, boolean ignoreEmpty) { return split(str, separator, limit, true, ignoreEmpty, true); } @@ -307,7 +308,7 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.2.1 */ - public static List split(String text, String separator, int limit, boolean isTrim, boolean ignoreEmpty, boolean ignoreCase) { + public static List split(CharSequence text, String separator, int limit, boolean isTrim, boolean ignoreEmpty, boolean ignoreCase) { final SplitIter splitIter = new SplitIter(text, new StrFinder(separator, ignoreCase), limit, ignoreEmpty); return splitIter.toList(isTrim); } @@ -323,7 +324,7 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.0.8 */ - public static String[] splitToArray(String str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) { + public static String[] splitToArray(CharSequence str, String separator, int limit, boolean isTrim, boolean ignoreEmpty) { return toArray(split(str, separator, limit, isTrim, ignoreEmpty)); } @@ -338,7 +339,8 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.0.8 */ - public static List split(String text, int limit) { + public static List split(CharSequence text, int limit) { + if (StrUtil.isEmpty(text)) { return new ArrayList<>(0); } @@ -362,7 +364,7 @@ public class StrSplitter { /** * 通过正则切分字符串 * - * @param str 字符串 + * @param text 字符串 * @param separatorRegex 分隔符正则 * @param limit 限制分片数 * @param isTrim 是否去除切分字符串后每个元素两边的空格 @@ -370,9 +372,9 @@ public class StrSplitter { * @return 切分后的集合 * @since 3.0.8 */ - public static List splitByRegex(String str, String separatorRegex, int limit, boolean isTrim, boolean ignoreEmpty) { + public static List splitByRegex(String text, String separatorRegex, int limit, boolean isTrim, boolean ignoreEmpty) { final Pattern pattern = PatternPool.get(separatorRegex); - return split(str, pattern, limit, isTrim, ignoreEmpty); + return split(text, pattern, limit, isTrim, ignoreEmpty); } /** @@ -387,7 +389,8 @@ public class StrSplitter { * @since 3.0.8 */ public static List split(String text, Pattern separatorPattern, int limit, boolean isTrim, boolean ignoreEmpty) { - if (StrUtil.isEmpty(text)) { + Assert.notNull(text, "Text must be not null!"); + if (text.length() < 1) { return new ArrayList<>(0); } final SplitIter splitIter = new SplitIter(text, new PatternFinder(separatorPattern), limit, ignoreEmpty); 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 c6d977696..847a23ce3 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 @@ -53,7 +53,6 @@ public class SplitIter extends ComputeIter implements Serializable { @Override protected String computeNext() { - Assert.notNull(this.text, "Text to find must be not null!"); // 达到数量上限或末尾,结束 if (count >= limit || offset > text.length()) { return null; 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 73d8e6e7f..b0aca478c 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 @@ -81,6 +81,16 @@ public class StrUtilTest { Assert.assertEquals("", split.get(2)); } + @Test(expected = IllegalArgumentException.class) + public void splitNullTest() { + StrUtil.split(null, '.'); + } + + @Test(expected = IllegalArgumentException.class) + public void splitToArrayNullTest() { + StrUtil.splitToArray(null, '.'); + } + @Test public void splitToLongTest() { String str = "1,2,3,4, 5";