From d6aa8fdb961bf7c54afcd24308cbd074a61f08dd Mon Sep 17 00:00:00 2001 From: herm2s <1142305913@qq.com> Date: Mon, 15 Aug 2022 17:50:11 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20StrUtil=E5=A2=9E=E5=8A=A0=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E5=AD=97=E7=AC=A6=E4=B8=B2=E4=B8=AD=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E6=8C=87=E5=AE=9A=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=92=8C?= =?UTF-8?q?=E6=9C=80=E5=90=8E=E4=B8=80=E4=B8=AA=E6=8C=87=E5=AE=9A=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/text/CharSequenceUtil.java | 64 +++++++++++++++++++ .../java/cn/hutool/core/util/StrUtilTest.java | 12 ++++ 2 files changed, 76 insertions(+) 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 aa730aef9..22ed20842 100755 --- a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java @@ -3752,6 +3752,70 @@ public class CharSequenceUtil { return ReUtil.replaceAll(str, regex, replaceFun); } + /** + * 替换字符串中最后一个指定字符串 + * + * @param str 字符串 + * @param searchStr 被查找的字符串 + * @param replacedStr 被替换的字符串 + * @return 替换后的字符串 + */ + public static String replaceLast(CharSequence str, CharSequence searchStr, CharSequence replacedStr) { + return replaceLast(str, searchStr, replacedStr, false); + } + + /** + * 替换字符串中最后一个指定字符串 + * + * @param str 字符串 + * @param searchStr 被查找的字符串 + * @param replacedStr 被替换的字符串 + * @param ignoreCase 是否忽略大小写 + * @return 替换后的字符串 + */ + public static String replaceLast(CharSequence str, CharSequence searchStr, CharSequence replacedStr, boolean ignoreCase) { + if (isEmpty(str)) { + return str(str); + } + int lastIndex = lastIndexOf(str, searchStr, str.length(), ignoreCase); + if (INDEX_NOT_FOUND == lastIndex) { + return str(str); + } + return replace(str, lastIndex, searchStr, replacedStr, ignoreCase); + } + + /** + * 替换字符串中第一个指定字符串 + * + * @param str 字符串 + * @param searchStr 被查找的字符串 + * @param replacedStr 被替换的字符串 + * @return 替换后的字符串 + */ + public static String replaceFirst(CharSequence str, CharSequence searchStr, CharSequence replacedStr) { + return replaceFirst(str, searchStr, replacedStr, false); + } + + /** + * 替换字符串中第一个指定字符串 + * + * @param str 字符串 + * @param searchStr 被查找的字符串 + * @param replacedStr 被替换的字符串 + * @param ignoreCase 是否忽略大小写 + * @return 替换后的字符串 + */ + public static String replaceFirst(CharSequence str, CharSequence searchStr, CharSequence replacedStr, boolean ignoreCase) { + if (isEmpty(str)) { + return str(str); + } + int startInclude = indexOf(str, searchStr, 0, ignoreCase); + if (INDEX_NOT_FOUND == startInclude) { + return str(str); + } + return replace(str, startInclude, startInclude + searchStr.length(), replacedStr); + } + /** * 替换指定字符串的指定区间内字符为"*" * 俗称:脱敏功能,后面其他功能,可以见:DesensitizedUtil(脱敏工具类) 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 a95193cf9..6a221a833 100755 --- a/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java @@ -618,5 +618,17 @@ public class StrUtilTest { Assert.assertTrue(StrUtil.containsAll(a, "214", "234")); } + @Test + public void replaceLastTest() { + String str = "i am jackjack"; + String result = StrUtil.replaceLast(str, "JACK", null, true); + Assert.assertEquals(result, "i am jack"); + } + @Test + public void replaceFirstTest() { + String str = "yesyes i do"; + String result = StrUtil.replaceFirst(str, "YES", "", true); + Assert.assertEquals(result, "yes i do"); + } }