From 506a8c2d3cc34c3c1f13cedc032270cee21e0f78 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 7 Jan 2022 19:59:46 +0800 Subject: [PATCH] fix bug --- CHANGELOG.md | 1 + .../main/java/cn/hutool/core/text/CharSequenceUtil.java | 4 +++- .../src/test/java/cn/hutool/core/util/StrUtilTest.java | 8 ++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39aa6f0a2..208ee2fe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ * 【core 】 修复split空判断不一致问题(pr#496@Gitee) * 【crypto 】 修复SM2.getDHex()前导0丢失,然后导致获取密钥错误(pr#2073@Github) * 【core 】 修复关于Calculator.conversion()方法EmptyStackException的bug(pr#2076@Github) +* 【core 】 修复StrUtil.subBetweenAll循环bug(issue#I4PT3M@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 2b84f1463..2d7bcad89 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 @@ -2336,7 +2336,9 @@ public class CharSequenceUtil { } } else { int suffixIndex; - for (String fragment : split) { + String fragment; + for (int i = 1; i < split.length; i++) { + fragment = split[i]; suffixIndex = fragment.indexOf(suffix.toString()); if (suffixIndex > 0) { result.add(fragment.substring(0, suffixIndex)); 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 d8fd2ea54..ee1e1da50 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 @@ -521,6 +521,14 @@ public class StrUtilTest { Assert.assertEquals("abc", strings[0]); } + @Test + public void subBetweenAllTest4() { + String str = "你好:1388681xxxx用户已开通,1877275xxxx用户已开通,无法发送业务开通短信"; + String[] strings = StrUtil.subBetweenAll(str, "1877275xxxx", ","); + Assert.assertEquals(1, strings.length); + Assert.assertEquals("用户已开通", strings[0]); + } + @Test public void briefTest() { // case: 1 至 str.length - 1