diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java index 718e76976..7b570ff67 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/text/CharSequenceUtil.java @@ -1388,6 +1388,31 @@ public class CharSequenceUtil extends StrValidator { // region ----- strip + /** + * 去除两边的指定字符串,忽略大小写 + * + * @param str 被处理的字符串 + * @param prefixOrSuffix 前缀或后缀 + * @return 处理后的字符串 + * @since 3.1.2 + */ + public static String stripIgnoreCase(final CharSequence str, final CharSequence prefixOrSuffix) { + return stripIgnoreCase(str, prefixOrSuffix, prefixOrSuffix); + } + + /** + * 去除两边的指定字符串,忽略大小写 + * + * @param str 被处理的字符串 + * @param prefix 前缀 + * @param suffix 后缀 + * @return 处理后的字符串 + * @since 3.1.2 + */ + public static String stripIgnoreCase(final CharSequence str, final CharSequence prefix, final CharSequence suffix) { + return strip(str, prefix, suffix, true); + } + /** * 去除两边的指定字符串 *
{@code
@@ -1432,6 +1457,33 @@ public class CharSequenceUtil extends StrValidator {
* @since 3.1.2
*/
public static String strip(final CharSequence str, final CharSequence prefix, final CharSequence suffix) {
+ return strip(str, prefix, suffix, false);
+ }
+
+ /**
+ * 去除两边的指定字符串
+ * 两边字符如果存在,则去除,不存在不做处理
+ * {@code
+ * "aaa_STRIPPED_bbb", "a", "b" -> "aa_STRIPPED_bb"
+ * "aaa_STRIPPED_bbb", null, null -> "aaa_STRIPPED_bbb"
+ * "aaa_STRIPPED_bbb", "", "" -> "aaa_STRIPPED_bbb"
+ * "aaa_STRIPPED_bbb", "", "b" -> "aaa_STRIPPED_bb"
+ * "aaa_STRIPPED_bbb", null, "b" -> "aaa_STRIPPED_bb"
+ * "aaa_STRIPPED_bbb", "a", "" -> "aa_STRIPPED_bbb"
+ * "aaa_STRIPPED_bbb", "a", null -> "aa_STRIPPED_bbb"
+ *
+ * "a", "a", "a" -> ""
+ * }
+ *
+ *
+ * @param str 被处理的字符串
+ * @param prefix 前缀
+ * @param suffix 后缀
+ * @param ignoreCase 是否忽略大小写
+ * @return 处理后的字符串
+ * @since 3.1.2
+ */
+ public static String strip(final CharSequence str, final CharSequence prefix, final CharSequence suffix, final boolean ignoreCase) {
if (isEmpty(str)) {
return toStringOrNull(str);
}
@@ -1440,14 +1492,14 @@ public class CharSequenceUtil extends StrValidator {
int from = 0;
int to = str2.length();
- if (startWith(str2, prefix)) {
+ if (startWith(str2, prefix, ignoreCase)) {
from = prefix.length();
if(from == to){
// "a", "a", "a" -> ""
return EMPTY;
}
}
- if (endWith(str2, suffix)) {
+ if (endWith(str2, suffix, ignoreCase)) {
to -= suffix.length();
if(from == to){
// "a", "a", "a" -> ""
@@ -1547,44 +1599,6 @@ public class CharSequenceUtil extends StrValidator {
return str2.substring(from, to);
}
-
- /**
- * 去除两边的指定字符串,忽略大小写
- *
- * @param str 被处理的字符串
- * @param prefixOrSuffix 前缀或后缀
- * @return 处理后的字符串
- * @since 3.1.2
- */
- public static String stripIgnoreCase(final CharSequence str, final CharSequence prefixOrSuffix) {
- return stripIgnoreCase(str, prefixOrSuffix, prefixOrSuffix);
- }
-
- /**
- * 去除两边的指定字符串,忽略大小写
- *
- * @param str 被处理的字符串
- * @param prefix 前缀
- * @param suffix 后缀
- * @return 处理后的字符串
- * @since 3.1.2
- */
- public static String stripIgnoreCase(final CharSequence str, final CharSequence prefix, final CharSequence suffix) {
- if (isEmpty(str)) {
- return toStringOrNull(str);
- }
- int from = 0;
- int to = str.length();
-
- final String str2 = str.toString();
- if (startWithIgnoreCase(str2, prefix)) {
- from = prefix.length();
- }
- if (endWithIgnoreCase(str2, suffix)) {
- to -= suffix.length();
- }
- return str2.substring(from, to);
- }
// endregion
// region ----- add
diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/text/CharSequenceUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/text/CharSequenceUtilTest.java
index 35e2172e3..855fabf39 100644
--- a/hutool-core/src/test/java/org/dromara/hutool/core/text/CharSequenceUtilTest.java
+++ b/hutool-core/src/test/java/org/dromara/hutool/core/text/CharSequenceUtilTest.java
@@ -451,6 +451,32 @@ public class CharSequenceUtilTest {
assertNull(result);
}
+ @Test
+ public void stripIgnoreCaseTest() {
+
+ final String SOURCE_STRING = "aaa_STRIPPED_bbb";
+
+ // ---------------------------- test strip ----------------------------
+
+ // Normal test
+ assertEquals("aa_STRIPPED_bbb", CharSequenceUtil.stripIgnoreCase(SOURCE_STRING, "a"));
+ assertEquals(SOURCE_STRING, CharSequenceUtil.stripIgnoreCase(SOURCE_STRING, ""));
+ assertEquals("aa_STRIPPED_bb", CharSequenceUtil.stripIgnoreCase(SOURCE_STRING, "A", "b"));
+
+ // test null param
+ assertEquals(SOURCE_STRING, CharSequenceUtil.stripIgnoreCase(SOURCE_STRING, null, null));
+ assertEquals(SOURCE_STRING, CharSequenceUtil.stripIgnoreCase(SOURCE_STRING, "", ""));
+ assertEquals("aaa_STRIPPED_bb", CharSequenceUtil.stripIgnoreCase(SOURCE_STRING, "", "B"));
+ assertEquals("aaa_STRIPPED_bb", CharSequenceUtil.stripIgnoreCase(SOURCE_STRING, null, "b"));
+ assertEquals("aa_STRIPPED_bbb", CharSequenceUtil.stripIgnoreCase(SOURCE_STRING, "a", ""));
+ assertEquals("aa_STRIPPED_bbb", CharSequenceUtil.stripIgnoreCase(SOURCE_STRING, "a", null));
+ // 本次提交前无法通过的 case
+ assertEquals("", CharSequenceUtil.stripIgnoreCase("a", "a", "a"));
+
+ // 前缀后缀有重叠,优先去掉前缀
+ assertEquals("a", CharSequenceUtil.stripIgnoreCase("aba", "aB", "bB"));
+ }
+
@Test
public void stripTest() {