From 3eaf4702f52ff2c144abc2b29bb4cd38345fc9ea Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 29 Mar 2020 12:29:12 +0800 Subject: [PATCH] add method --- CHANGELOG.md | 1 + .../java/cn/hutool/core/util/StrUtil.java | 41 ++++--------------- .../java/cn/hutool/core/util/StrUtilTest.java | 5 +++ 3 files changed, 15 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c2aa0da2..9651cee1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### 新特性 * 【extra 】 JschUtil增加execByShell方法(issue#I1CYES@Gitee) +* 【core 】 StrUtil增加subBetweenAll方法,Console增加where和lineNumber方法(issue#812@Github) ### Bug修复 * 【extra 】 修复SpringUtil使用devtools重启报错问题 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 afe1ca6cf..f3f36f253 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 @@ -1968,50 +1968,27 @@ public class StrUtil { * StrUtil.subBetweenAll("[yabc[zy]abcz]", "[", "]"); = ["zy"] 重叠时只截取内部, * * - * @param str 被切割的字符串 + * @param str 被切割的字符串 * @param prefix 截取开始的字符串标识 - * @param suffix 截取到的字符串标识 + * @param suffix 截取到的字符串标识 * @return 截取后的字符串 * @author dahuoyzs * @since 5.2.5 */ public static String[] subBetweenAll(CharSequence str, CharSequence prefix, CharSequence suffix) { - if(hasEmpty(str, prefix, suffix)) { + if (hasEmpty(str, prefix, suffix)) { return new String[0]; } - final int prefixCount = count(str, prefix); - final int suffixCount = count(str, suffix); - if (prefixCount < 1 || suffixCount < 1) { - return new String[0]; - } - - LinkedList betweenList = new LinkedList<>(); - if (prefixCount > suffixCount) { - String[] fragments = split(str, suffix); - for (int i = 0; i < fragments.length - 1; i++) { - String fragment = fragments[i]; - if (fragment.contains(prefix)) { - int beforeIndex = StrUtil.lastIndexOf(fragment, prefix, 0, false); - String between = fragment.substring(beforeIndex); - if (between.length() > 0) - betweenList.add(between); - } - } - } else { - String[] fragments = split(str, prefix); - for (int i = 1; i < fragments.length; i++) { - String fragment = fragments[i]; - if (fragment.contains(suffix)) { - int afterIndex = StrUtil.indexOf(fragment, suffix, 0, false); - String between = fragment.substring(0, afterIndex); - if (between.length() > 0) - betweenList.add(between); - } + final List result = new LinkedList<>(); + for (String fragment : split(str, prefix)) { + int suffixIndex = fragment.indexOf(suffix.toString()); + if (suffixIndex > 0) { + result.add(fragment.substring(0, suffixIndex)); } } - return betweenList.toArray(new String[0]); + return result.toArray(new String[0]); } /** 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 6e3a41fde..770ded054 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 @@ -426,6 +426,11 @@ public class StrUtilTest { 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[]{"abc", "abc"}, StrUtil.subBetweenAll("yabczyabcz","y","z")); + Assert.assertArrayEquals(new String[0], StrUtil.subBetweenAll(null,"y","z")); + Assert.assertArrayEquals(new String[0], StrUtil.subBetweenAll("","y","z")); + Assert.assertArrayEquals(new String[0], StrUtil.subBetweenAll("abc",null,"z")); + Assert.assertArrayEquals(new String[0], StrUtil.subBetweenAll("abc","y",null)); } }