CharSequenceUtil增加removeAllPrefix和removeAllSuffix方法

This commit is contained in:
Looly 2024-07-16 19:17:21 +08:00
parent 05efb8dd79
commit 0bf794883a
4 changed files with 162 additions and 87 deletions

View File

@ -8,6 +8,7 @@
* 【core 】 Converter转换规则变更空对象、空值转为Bean时创建默认对象而非nullissue#3649@Github * 【core 】 Converter转换规则变更空对象、空值转为Bean时创建默认对象而非nullissue#3649@Github
* 【core 】 UrlQuery增加remove方法 * 【core 】 UrlQuery增加remove方法
* 【extra 】 增加JakartaMailUtil支持新包名的mail * 【extra 】 增加JakartaMailUtil支持新包名的mail
* 【core 】 CharSequenceUtil增加removeAllPrefix和removeAllSuffix方法pr#3655@Github
### 🐞Bug修复 ### 🐞Bug修复
* 【core 】 修复因RFC3986理解有误导致的UrlPath处理冒号转义问题issue#IAAE88@Gitee * 【core 】 修复因RFC3986理解有误导致的UrlPath处理冒号转义问题issue#IAAE88@Gitee

View File

@ -2,3 +2,4 @@
git checkout v5-dev git checkout v5-dev
git pull osc v5-dev git pull osc v5-dev
git pull origin v5-dev

View File

@ -1466,22 +1466,33 @@ public class CharSequenceUtil {
} }
/** /**
* 去掉指定所有前缀 * 去掉指定所有前缀
* <pre>{@code
* str=abcdef, prefix=ab => return cdef
* str=ababcdef, prefix=ab => return cdef
* str=ababcdef, prefix="" => return ababcdef
* str=ababcdef, prefix=null => return ababcdef
* }</pre>
* *
* @param str 字符串 * @param str 字符串空返回原字符串
* @param prefix 前缀 * @param prefix 前缀空返回原字符串
* @return 切掉所有前缀的字符串若前缀不是 preffix 返回原字符串 * @return 去掉所有前缀的字符串若前缀不是 preffix 返回原字符串
* @since 5.8.30
*/ */
public static String removeAllPrefix(CharSequence str, CharSequence prefix) { public static String removeAllPrefix(CharSequence str, CharSequence prefix) {
if (isEmpty(str) || isEmpty(prefix)) { if (isEmpty(str) || isEmpty(prefix)) {
return str(str); return str(str);
} }
String str2 = str.toString(); final String prefixStr = prefix.toString();
while (str2.startsWith(prefix.toString())) { final int prefixLength = prefixStr.length();
str2 = removePrefix(str2, prefix);
final String str2 = str.toString();
int toIndex = 0;
while (str2.startsWith(prefixStr, toIndex)) {
toIndex += prefixLength;
} }
return str2; return subSuf(str2, toIndex);
} }
/** /**
@ -1523,22 +1534,33 @@ public class CharSequenceUtil {
} }
/** /**
* 去掉指定所有后缀 * 去掉指定所有后缀
* <pre>{@code
* str=11abab, suffix=ab => return 11
* str=11ab, suffix=ab => return 11
* str=11ab, suffix="" => return 11ab
* str=11ab, suffix=null => return 11ab
* }</pre>
* *
* @param str 字符串 * @param str 字符串空返回原字符串
* @param suffix 后缀 * @param suffix 后缀字符串空返回原字符串
* @return 切掉所有后缀的字符串若后缀不是 suffix 返回原字符串 * @return 去掉所有后缀的字符串若后缀不是 suffix 返回原字符串
* @since 5.8.30
*/ */
public static String removeAllSuffix(CharSequence str, CharSequence suffix) { public static String removeAllSuffix(CharSequence str, CharSequence suffix) {
if (isEmpty(str) || isEmpty(suffix)) { if (isEmpty(str) || isEmpty(suffix)) {
return str(str); return str(str);
} }
String str2 = str.toString(); final String suffixStr = suffix.toString();
while (str2.endsWith(suffix.toString())) { final int suffixLength = suffixStr.length();
str2 = removeSuffix(str2, suffix);
final String str2 = str.toString();
int toIndex = str2.length();
while (str2.startsWith(suffixStr, toIndex - suffixLength)){
toIndex -= suffixLength;
} }
return str2; return subPre(str2, toIndex);
} }

View File

@ -6,12 +6,14 @@ import org.junit.Test;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static org.junit.Assert.*;
public class CharSequenceUtilTest { public class CharSequenceUtilTest {
@Test @Test
public void replaceTest() { public void replaceTest() {
String actual = CharSequenceUtil.replace("SSM15930297701BeryAllen", Pattern.compile("[0-9]"), matcher -> ""); String actual = CharSequenceUtil.replace("SSM15930297701BeryAllen", Pattern.compile("[0-9]"), matcher -> "");
Assert.assertEquals("SSMBeryAllen", actual); assertEquals("SSMBeryAllen", actual);
} }
@Test @Test
@ -19,38 +21,38 @@ public class CharSequenceUtilTest {
// https://gitee.com/dromara/hutool/issues/I4M16G // https://gitee.com/dromara/hutool/issues/I4M16G
String replace = "#{A}"; String replace = "#{A}";
String result = CharSequenceUtil.replace(replace, "#{AAAAAAA}", "1"); String result = CharSequenceUtil.replace(replace, "#{AAAAAAA}", "1");
Assert.assertEquals(replace, result); assertEquals(replace, result);
} }
@Test @Test
public void replaceByStrTest() { public void replaceByStrTest() {
String replace = "SSM15930297701BeryAllen"; String replace = "SSM15930297701BeryAllen";
String result = CharSequenceUtil.replaceByCodePoint(replace, 5, 12, "***"); String result = CharSequenceUtil.replaceByCodePoint(replace, 5, 12, "***");
Assert.assertEquals("SSM15***01BeryAllen", result); assertEquals("SSM15***01BeryAllen", result);
} }
@Test @Test
public void addPrefixIfNotTest() { public void addPrefixIfNotTest() {
String str = "hutool"; String str = "hutool";
String result = CharSequenceUtil.addPrefixIfNot(str, "hu"); String result = CharSequenceUtil.addPrefixIfNot(str, "hu");
Assert.assertEquals(str, result); assertEquals(str, result);
result = CharSequenceUtil.addPrefixIfNot(str, "Good"); result = CharSequenceUtil.addPrefixIfNot(str, "Good");
Assert.assertEquals("Good" + str, result); assertEquals("Good" + str, result);
} }
@Test @Test
public void addSuffixIfNotTest() { public void addSuffixIfNotTest() {
String str = "hutool"; String str = "hutool";
String result = CharSequenceUtil.addSuffixIfNot(str, "tool"); String result = CharSequenceUtil.addSuffixIfNot(str, "tool");
Assert.assertEquals(str, result); assertEquals(str, result);
result = CharSequenceUtil.addSuffixIfNot(str, " is Good"); result = CharSequenceUtil.addSuffixIfNot(str, " is Good");
Assert.assertEquals(str + " is Good", result); assertEquals(str + " is Good", result);
// https://gitee.com/dromara/hutool/issues/I4NS0F // https://gitee.com/dromara/hutool/issues/I4NS0F
result = CharSequenceUtil.addSuffixIfNot("", "/"); result = CharSequenceUtil.addSuffixIfNot("", "/");
Assert.assertEquals("/", result); assertEquals("/", result);
} }
@Test @Test
@ -64,26 +66,26 @@ public class CharSequenceUtilTest {
str1 = CharSequenceUtil.normalize(str1); str1 = CharSequenceUtil.normalize(str1);
str2 = CharSequenceUtil.normalize(str2); str2 = CharSequenceUtil.normalize(str2);
Assert.assertEquals(str1, str2); assertEquals(str1, str2);
} }
@Test @Test
public void indexOfTest() { public void indexOfTest() {
int index = CharSequenceUtil.indexOf("abc123", '1'); int index = CharSequenceUtil.indexOf("abc123", '1');
Assert.assertEquals(3, index); assertEquals(3, index);
index = CharSequenceUtil.indexOf("abc123", '3'); index = CharSequenceUtil.indexOf("abc123", '3');
Assert.assertEquals(5, index); assertEquals(5, index);
index = CharSequenceUtil.indexOf("abc123", 'a'); index = CharSequenceUtil.indexOf("abc123", 'a');
Assert.assertEquals(0, index); assertEquals(0, index);
} }
@Test @Test
public void indexOfTest2() { public void indexOfTest2() {
int index = CharSequenceUtil.indexOf("abc123", '1', 0, 3); int index = CharSequenceUtil.indexOf("abc123", '1', 0, 3);
Assert.assertEquals(-1, index); assertEquals(-1, index);
index = CharSequenceUtil.indexOf("abc123", 'b', 0, 3); index = CharSequenceUtil.indexOf("abc123", 'b', 0, 3);
Assert.assertEquals(1, index); assertEquals(1, index);
} }
@Test @Test
@ -92,73 +94,73 @@ public class CharSequenceUtilTest {
String s = "华硕K42Intel酷睿i31代2G以下独立显卡不含机械硬盘固态硬盘120GB-192GB4GB-6GB"; String s = "华硕K42Intel酷睿i31代2G以下独立显卡不含机械硬盘固态硬盘120GB-192GB4GB-6GB";
String v = CharSequenceUtil.subPreGbk(s, 40, false); String v = CharSequenceUtil.subPreGbk(s, 40, false);
Assert.assertEquals(39, v.getBytes(CharsetUtil.CHARSET_GBK).length); assertEquals(39, v.getBytes(CharsetUtil.CHARSET_GBK).length);
v = CharSequenceUtil.subPreGbk(s, 40, true); v = CharSequenceUtil.subPreGbk(s, 40, true);
Assert.assertEquals(41, v.getBytes(CharsetUtil.CHARSET_GBK).length); assertEquals(41, v.getBytes(CharsetUtil.CHARSET_GBK).length);
} }
@Test @Test
public void startWithTest() { public void startWithTest() {
// https://gitee.com/dromara/hutool/issues/I4MV7Q // https://gitee.com/dromara/hutool/issues/I4MV7Q
Assert.assertFalse(CharSequenceUtil.startWith("123", "123", false, true)); assertFalse(CharSequenceUtil.startWith("123", "123", false, true));
Assert.assertFalse(CharSequenceUtil.startWith(null, null, false, true)); assertFalse(CharSequenceUtil.startWith(null, null, false, true));
Assert.assertFalse(CharSequenceUtil.startWith("abc", "abc", true, true)); assertFalse(CharSequenceUtil.startWith("abc", "abc", true, true));
Assert.assertTrue(CharSequenceUtil.startWithIgnoreCase(null, null)); Assert.assertTrue(CharSequenceUtil.startWithIgnoreCase(null, null));
Assert.assertFalse(CharSequenceUtil.startWithIgnoreCase(null, "abc")); assertFalse(CharSequenceUtil.startWithIgnoreCase(null, "abc"));
Assert.assertFalse(CharSequenceUtil.startWithIgnoreCase("abcdef", null)); assertFalse(CharSequenceUtil.startWithIgnoreCase("abcdef", null));
Assert.assertTrue(CharSequenceUtil.startWithIgnoreCase("abcdef", "abc")); Assert.assertTrue(CharSequenceUtil.startWithIgnoreCase("abcdef", "abc"));
Assert.assertTrue(CharSequenceUtil.startWithIgnoreCase("ABCDEF", "abc")); Assert.assertTrue(CharSequenceUtil.startWithIgnoreCase("ABCDEF", "abc"));
} }
@Test @Test
public void endWithTest() { public void endWithTest() {
Assert.assertFalse(CharSequenceUtil.endWith("123", "123", false, true)); assertFalse(CharSequenceUtil.endWith("123", "123", false, true));
Assert.assertFalse(CharSequenceUtil.endWith(null, null, false, true)); assertFalse(CharSequenceUtil.endWith(null, null, false, true));
Assert.assertFalse(CharSequenceUtil.endWith("abc", "abc", true, true)); assertFalse(CharSequenceUtil.endWith("abc", "abc", true, true));
Assert.assertTrue(CharSequenceUtil.endWithIgnoreCase(null, null)); Assert.assertTrue(CharSequenceUtil.endWithIgnoreCase(null, null));
Assert.assertFalse(CharSequenceUtil.endWithIgnoreCase(null, "abc")); assertFalse(CharSequenceUtil.endWithIgnoreCase(null, "abc"));
Assert.assertFalse(CharSequenceUtil.endWithIgnoreCase("abcdef", null)); assertFalse(CharSequenceUtil.endWithIgnoreCase("abcdef", null));
Assert.assertTrue(CharSequenceUtil.endWithIgnoreCase("abcdef", "def")); Assert.assertTrue(CharSequenceUtil.endWithIgnoreCase("abcdef", "def"));
Assert.assertTrue(CharSequenceUtil.endWithIgnoreCase("ABCDEF", "def")); Assert.assertTrue(CharSequenceUtil.endWithIgnoreCase("ABCDEF", "def"));
} }
@Test @Test
public void removePrefixIgnoreCaseTest(){ public void removePrefixIgnoreCaseTest(){
Assert.assertEquals("de", CharSequenceUtil.removePrefixIgnoreCase("ABCde", "abc")); assertEquals("de", CharSequenceUtil.removePrefixIgnoreCase("ABCde", "abc"));
Assert.assertEquals("de", CharSequenceUtil.removePrefixIgnoreCase("ABCde", "ABC")); assertEquals("de", CharSequenceUtil.removePrefixIgnoreCase("ABCde", "ABC"));
Assert.assertEquals("de", CharSequenceUtil.removePrefixIgnoreCase("ABCde", "Abc")); assertEquals("de", CharSequenceUtil.removePrefixIgnoreCase("ABCde", "Abc"));
Assert.assertEquals("ABCde", CharSequenceUtil.removePrefixIgnoreCase("ABCde", "")); assertEquals("ABCde", CharSequenceUtil.removePrefixIgnoreCase("ABCde", ""));
Assert.assertEquals("ABCde", CharSequenceUtil.removePrefixIgnoreCase("ABCde", null)); assertEquals("ABCde", CharSequenceUtil.removePrefixIgnoreCase("ABCde", null));
Assert.assertEquals("", CharSequenceUtil.removePrefixIgnoreCase("ABCde", "ABCde")); assertEquals("", CharSequenceUtil.removePrefixIgnoreCase("ABCde", "ABCde"));
Assert.assertEquals("ABCde", CharSequenceUtil.removePrefixIgnoreCase("ABCde", "ABCdef")); assertEquals("ABCde", CharSequenceUtil.removePrefixIgnoreCase("ABCde", "ABCdef"));
Assert.assertNull(CharSequenceUtil.removePrefixIgnoreCase(null, "ABCdef")); assertNull(CharSequenceUtil.removePrefixIgnoreCase(null, "ABCdef"));
} }
@Test @Test
public void removeSuffixIgnoreCaseTest(){ public void removeSuffixIgnoreCaseTest(){
Assert.assertEquals("AB", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", "cde")); assertEquals("AB", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", "cde"));
Assert.assertEquals("AB", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", "CDE")); assertEquals("AB", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", "CDE"));
Assert.assertEquals("AB", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", "Cde")); assertEquals("AB", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", "Cde"));
Assert.assertEquals("ABCde", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", "")); assertEquals("ABCde", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", ""));
Assert.assertEquals("ABCde", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", null)); assertEquals("ABCde", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", null));
Assert.assertEquals("", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", "ABCde")); assertEquals("", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", "ABCde"));
Assert.assertEquals("ABCde", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", "ABCdef")); assertEquals("ABCde", CharSequenceUtil.removeSuffixIgnoreCase("ABCde", "ABCdef"));
Assert.assertNull(CharSequenceUtil.removeSuffixIgnoreCase(null, "ABCdef")); assertNull(CharSequenceUtil.removeSuffixIgnoreCase(null, "ABCdef"));
} }
@Test @Test
public void trimToNullTest(){ public void trimToNullTest(){
String a = " "; String a = " ";
Assert.assertNull(CharSequenceUtil.trimToNull(a)); assertNull(CharSequenceUtil.trimToNull(a));
a = ""; a = "";
Assert.assertNull(CharSequenceUtil.trimToNull(a)); assertNull(CharSequenceUtil.trimToNull(a));
a = null; a = null;
Assert.assertNull(CharSequenceUtil.trimToNull(a)); assertNull(CharSequenceUtil.trimToNull(a));
} }
@Test @Test
@ -166,22 +168,22 @@ public class CharSequenceUtilTest {
// -------------------------- None match ----------------------- // -------------------------- None match -----------------------
Assert.assertEquals("", CharSequenceUtil.commonPrefix("", "abc")); assertEquals("", CharSequenceUtil.commonPrefix("", "abc"));
Assert.assertEquals("", CharSequenceUtil.commonPrefix(null, "abc")); assertEquals("", CharSequenceUtil.commonPrefix(null, "abc"));
Assert.assertEquals("", CharSequenceUtil.commonPrefix("abc", null)); assertEquals("", CharSequenceUtil.commonPrefix("abc", null));
Assert.assertEquals("", CharSequenceUtil.commonPrefix("abc", "")); assertEquals("", CharSequenceUtil.commonPrefix("abc", ""));
Assert.assertEquals("", CharSequenceUtil.commonPrefix("azzzj", "bzzzj")); assertEquals("", CharSequenceUtil.commonPrefix("azzzj", "bzzzj"));
Assert.assertEquals("", CharSequenceUtil.commonPrefix("english中文", "french中文")); assertEquals("", CharSequenceUtil.commonPrefix("english中文", "french中文"));
// -------------------------- Matched ----------------------- // -------------------------- Matched -----------------------
Assert.assertEquals("name_", CharSequenceUtil.commonPrefix("name_abc", "name_efg")); assertEquals("name_", CharSequenceUtil.commonPrefix("name_abc", "name_efg"));
Assert.assertEquals("zzzj", CharSequenceUtil.commonPrefix("zzzja", "zzzjb")); assertEquals("zzzj", CharSequenceUtil.commonPrefix("zzzja", "zzzjb"));
Assert.assertEquals("中文", CharSequenceUtil.commonPrefix("中文english", "中文french")); assertEquals("中文", CharSequenceUtil.commonPrefix("中文english", "中文french"));
// { space * 10 } + "abc" // { space * 10 } + "abc"
final String str1 = CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 10) + "abc"; final String str1 = CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 10) + "abc";
@ -190,7 +192,7 @@ public class CharSequenceUtilTest {
final String str2 = CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 5) + "efg"; final String str2 = CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 5) + "efg";
// Expect common prefix: { space * 5 } // Expect common prefix: { space * 5 }
Assert.assertEquals(CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 5), CharSequenceUtil.commonPrefix(str1, str2)); assertEquals(CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 5), CharSequenceUtil.commonPrefix(str1, str2));
} }
@Test @Test
@ -198,22 +200,22 @@ public class CharSequenceUtilTest {
// -------------------------- None match ----------------------- // -------------------------- None match -----------------------
Assert.assertEquals("", CharSequenceUtil.commonSuffix("", "abc")); assertEquals("", CharSequenceUtil.commonSuffix("", "abc"));
Assert.assertEquals("", CharSequenceUtil.commonSuffix(null, "abc")); assertEquals("", CharSequenceUtil.commonSuffix(null, "abc"));
Assert.assertEquals("", CharSequenceUtil.commonSuffix("abc", null)); assertEquals("", CharSequenceUtil.commonSuffix("abc", null));
Assert.assertEquals("", CharSequenceUtil.commonSuffix("abc", "")); assertEquals("", CharSequenceUtil.commonSuffix("abc", ""));
Assert.assertEquals("", CharSequenceUtil.commonSuffix("zzzja", "zzzjb")); assertEquals("", CharSequenceUtil.commonSuffix("zzzja", "zzzjb"));
Assert.assertEquals("", CharSequenceUtil.commonSuffix("中文english", "中文Korean")); assertEquals("", CharSequenceUtil.commonSuffix("中文english", "中文Korean"));
// -------------------------- Matched ----------------------- // -------------------------- Matched -----------------------
Assert.assertEquals("_name", CharSequenceUtil.commonSuffix("abc_name", "efg_name")); assertEquals("_name", CharSequenceUtil.commonSuffix("abc_name", "efg_name"));
Assert.assertEquals("zzzj", CharSequenceUtil.commonSuffix("abczzzj", "efgzzzj")); assertEquals("zzzj", CharSequenceUtil.commonSuffix("abczzzj", "efgzzzj"));
Assert.assertEquals("中文", CharSequenceUtil.commonSuffix("english中文", "Korean中文")); assertEquals("中文", CharSequenceUtil.commonSuffix("english中文", "Korean中文"));
// "abc" + { space * 10 } // "abc" + { space * 10 }
final String str1 = "abc" + CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 10); final String str1 = "abc" + CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 10);
@ -222,7 +224,7 @@ public class CharSequenceUtilTest {
final String str2 = "efg" + CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 15); final String str2 = "efg" + CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 15);
// Expect common suffix: { space * 10 } // Expect common suffix: { space * 10 }
Assert.assertEquals(CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 10), CharSequenceUtil.commonSuffix(str1, str2)); assertEquals(CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 10), CharSequenceUtil.commonSuffix(str1, str2));
} }
@Test @Test
@ -234,13 +236,62 @@ public class CharSequenceUtilTest {
Assert.assertTrue(CharSequenceUtil.containsOnly("asdf", 'a', 's', 'd', 'f')); Assert.assertTrue(CharSequenceUtil.containsOnly("asdf", 'a', 's', 'd', 'f'));
// 测试字符串包含testChars中的字符和其它字符 // 测试字符串包含testChars中的字符和其它字符
Assert.assertFalse(CharSequenceUtil.containsOnly("asdf123", 'a', 's', 'd', 'f')); assertFalse(CharSequenceUtil.containsOnly("asdf123", 'a', 's', 'd', 'f'));
// 测试字符串不包含testChars中的任何字符 // 测试字符串不包含testChars中的任何字符
Assert.assertFalse(CharSequenceUtil.containsOnly("hello", 'a', 'b')); assertFalse(CharSequenceUtil.containsOnly("hello", 'a', 'b'));
// 测试字符串为null // 测试字符串为null
Assert.assertTrue(CharSequenceUtil.containsOnly(null, 'a', 'b')); assertTrue(CharSequenceUtil.containsOnly(null, 'a', 'b'));
} }
@Test
public void removeAllPrefixTest() {
final String prefix = "ab";
String str = "ababcdef";
String result = CharSequenceUtil.removeAllPrefix(str, prefix);
assertEquals("cdef", result);
str = "abcdef";
result = CharSequenceUtil.removeAllPrefix(str, prefix);
assertEquals("cdef", result);
str = "cdef";
result = CharSequenceUtil.removeAllPrefix(str, prefix);
assertEquals("cdef", result);
str = "";
result = CharSequenceUtil.removeAllPrefix(str, prefix);
assertEquals("", result);
str = null;
result = CharSequenceUtil.removeAllPrefix(str, prefix);
assertNull(result);
}
@Test
public void removeAllSuffixTest() {
final String prefix = "ab";
String str = "cdefabab";
String result = CharSequenceUtil.removeAllSuffix(str, prefix);
assertEquals("cdef", result);
str = "cdefab";
result = CharSequenceUtil.removeAllSuffix(str, prefix);
assertEquals("cdef", result);
str = "cdef";
result = CharSequenceUtil.removeAllSuffix(str, prefix);
assertEquals("cdef", result);
str = "";
result = CharSequenceUtil.removeAllSuffix(str, prefix);
assertEquals("", result);
str = null;
result = CharSequenceUtil.removeAllSuffix(str, prefix);
assertNull(result);
}
} }