diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java index ce4220a6e..65923ca77 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java @@ -4,11 +4,11 @@ import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.convert.AbstractConverter; import cn.hutool.core.convert.Convert; +import cn.hutool.core.io.SerializeUtil; import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.CharUtil; -import cn.hutool.core.util.ObjUtil; import java.io.Serializable; import java.lang.reflect.Array; @@ -160,7 +160,7 @@ public class ArrayConverter extends AbstractConverter { result = ByteUtil.numberToBytes((Number)value); } else if (value instanceof Serializable && byte.class == targetComponentType) { // 用户可能想序列化指定对象 - result = ObjUtil.serialize(value); + result = SerializeUtil.serialize(value); } else { // everything else: result = convertToSingleElementArray(targetComponentType, value); diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java index 3e203ce9e..379afe302 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java @@ -6,11 +6,11 @@ import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.ValueProvider; import cn.hutool.core.convert.ConvertException; import cn.hutool.core.convert.Converter; +import cn.hutool.core.io.SerializeUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.map.MapProxy; import cn.hutool.core.reflect.ConstructorUtil; import cn.hutool.core.reflect.TypeUtil; -import cn.hutool.core.util.ObjUtil; import java.io.Serializable; import java.lang.reflect.Type; @@ -76,7 +76,7 @@ public class BeanConverter implements Converter, Serializable { return BeanCopier.of(value, ConstructorUtil.newInstanceIfPossible(targetClass), targetType, this.copyOptions).copy(); } else if (value instanceof byte[]) { // 尝试反序列化 - return ObjUtil.deserialize((byte[]) value); + return SerializeUtil.deserialize((byte[]) value); } throw new ConvertException("Unsupported source type: {}", value.getClass()); diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java index a21f71279..c193bd571 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java @@ -367,34 +367,6 @@ public class ObjUtil { return SerializeUtil.clone(obj); } - /** - * 序列化
- * 对象必须实现Serializable接口 - * - * @param 对象类型 - * @param obj 要被序列化的对象 - * @return 序列化后的字节码 - */ - public static byte[] serialize(final T obj) { - return SerializeUtil.serialize(obj); - } - - /** - * 反序列化
- * 对象必须实现Serializable接口 - * - *

- * 注意!!! 此方法不会检查反序列化安全,可能存在反序列化漏洞风险!!! - *

- * - * @param 对象类型 - * @param bytes 反序列化的字节码 - * @return 反序列化后的对象 - */ - public static T deserialize(final byte[] bytes) { - return SerializeUtil.deserialize(bytes); - } - /** * 是否为基本类型,包括包装类型和非包装类型 * @@ -498,57 +470,4 @@ public class ObjUtil { return Convert.toStr(obj); } - - /** - * 存在多少个{@code null}或空对象,通过{@link ObjUtil#isEmpty(Object)} 判断元素 - * - * @param objs 被检查的对象,一个或者多个 - * @return 存在{@code null}的数量 - */ - public static int emptyCount(final Object... objs) { - return ArrayUtil.emptyCount(objs); - } - - /** - * 是否存在{@code null}对象,通过{@link ObjUtil#isNull(Object)} 判断元素 - * - * @param objs 被检查对象 - * @return 是否存在 - * @see ArrayUtil#hasNull(Object[]) - * @since 5.5.3 - */ - public static boolean hasNull(final Object... objs) { - return ArrayUtil.hasNull(objs); - } - - /** - * 是否存在{@code null}或空对象,通过{@link ObjUtil#isEmpty(Object)} 判断元素 - * - * @param objs 被检查对象 - * @return 是否存在 - * @see ArrayUtil#hasEmpty(Object...) - */ - public static boolean hasEmpty(final Object... objs) { - return ArrayUtil.hasEmpty(objs); - } - - /** - * 是否全都为{@code null}或空对象,通过{@link ObjUtil#isEmpty(Object)} 判断元素 - * - * @param objs 被检查的对象,一个或者多个 - * @return 是否都为空 - */ - public static boolean isAllEmpty(final Object... objs) { - return ArrayUtil.isAllEmpty(objs); - } - - /** - * 是否全都不为{@code null}或空对象,通过{@link ObjUtil#isEmpty(Object)} 判断元素 - * - * @param objs 被检查的对象,一个或者多个 - * @return 是否都不为空 - */ - public static boolean isAllNotEmpty(final Object... objs) { - return ArrayUtil.isAllNotEmpty(objs); - } } diff --git a/hutool-core/src/test/java/cn/hutool/core/map/TolerantMapTest.java b/hutool-core/src/test/java/cn/hutool/core/map/TolerantMapTest.java index c3c474d74..c1c030e40 100644 --- a/hutool-core/src/test/java/cn/hutool/core/map/TolerantMapTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/map/TolerantMapTest.java @@ -1,5 +1,6 @@ package cn.hutool.core.map; +import cn.hutool.core.io.SerializeUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.RandomUtil; import org.junit.Before; @@ -19,8 +20,8 @@ public class TolerantMapTest { @Test public void testSerialize() { - final byte[] bytes = ObjUtil.serialize(map); - final TolerantMap serializedMap = ObjUtil.deserialize(bytes); + final byte[] bytes = SerializeUtil.serialize(map); + final TolerantMap serializedMap = SerializeUtil.deserialize(bytes); assert serializedMap != map; assert map.equals(serializedMap); } diff --git a/hutool-core/src/test/java/cn/hutool/core/text/StrUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/text/StrUtilTest.java index 47aea4ad5..95cfe2ebc 100644 --- a/hutool-core/src/test/java/cn/hutool/core/text/StrUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/text/StrUtilTest.java @@ -1,12 +1,619 @@ package cn.hutool.core.text; +import cn.hutool.core.map.Dict; +import cn.hutool.core.util.CharUtil; +import cn.hutool.core.util.RandomUtil; import org.junit.Assert; import org.junit.Test; import java.util.LinkedList; import java.util.List; +/** + * 字符串工具类单元测试 + * + * @author Looly + */ public class StrUtilTest { + @Test + public void isBlankTest() { + final String blank = "   "; + Assert.assertTrue(StrUtil.isBlank(blank)); + } + + @Test + public void trimTest() { + final String blank = " 哈哈  "; + final String trim = StrUtil.trim(blank); + Assert.assertEquals("哈哈", trim); + } + + @Test + public void trimNewLineTest() { + String str = "\r\naaa"; + Assert.assertEquals("aaa", StrUtil.trim(str)); + str = "\raaa"; + Assert.assertEquals("aaa", StrUtil.trim(str)); + str = "\naaa"; + Assert.assertEquals("aaa", StrUtil.trim(str)); + str = "\r\n\r\naaa"; + Assert.assertEquals("aaa", StrUtil.trim(str)); + } + + @Test + public void trimTabTest() { + final String str = "\taaa"; + Assert.assertEquals("aaa", StrUtil.trim(str)); + } + + @Test + public void cleanBlankTest() { + // 包含:制表符、英文空格、不间断空白符、全角空格 + final String str = " 你 好 "; + final String cleanBlank = StrUtil.cleanBlank(str); + Assert.assertEquals("你好", cleanBlank); + } + + @Test + public void cutTest() { + final String str = "aaabbbcccdddaadfdfsdfsdf0"; + final String[] cut = StrUtil.cut(str, 4); + Assert.assertArrayEquals(new String[]{"aaab", "bbcc", "cddd", "aadf", "dfsd", "fsdf", "0"}, cut); + } + + @Test + public void splitTest() { + final String str = "a,b ,c,d,,e"; + final List split = StrUtil.split(str, ',', -1, true, true); + // 测试空是否被去掉 + Assert.assertEquals(5, split.size()); + // 测试去掉两边空白符是否生效 + Assert.assertEquals("b", split.get(1)); + + final String[] strings = StrUtil.splitToArray("abc/", '/'); + Assert.assertEquals(2, strings.length); + } + + @Test + public void splitEmptyTest() { + final String str = ""; + final List split = StrUtil.split(str, ',', -1, true, true); + // 测试空是否被去掉 + Assert.assertEquals(0, split.size()); + } + + @Test + public void splitTest2() { + final String str = "a.b."; + final List split = StrUtil.split(str, '.'); + Assert.assertEquals(3, split.size()); + Assert.assertEquals("b", split.get(1)); + Assert.assertEquals("", split.get(2)); + } + + @Test + public void splitNullTest() { + Assert.assertEquals(0, StrUtil.split(null, '.').size()); + } + + @Test(expected = IllegalArgumentException.class) + public void splitToArrayNullTest() { + StrUtil.splitToArray(null, '.'); + } + + @Test + public void splitToLongTest() { + final String str = "1,2,3,4, 5"; + long[] longArray = StrUtil.splitToLong(str, ','); + Assert.assertArrayEquals(new long[]{1, 2, 3, 4, 5}, longArray); + + longArray = StrUtil.splitToLong(str, ","); + Assert.assertArrayEquals(new long[]{1, 2, 3, 4, 5}, longArray); + } + + @Test + public void splitToIntTest() { + final String str = "1,2,3,4, 5"; + int[] intArray = StrUtil.splitToInt(str, ','); + Assert.assertArrayEquals(new int[]{1, 2, 3, 4, 5}, intArray); + + intArray = StrUtil.splitToInt(str, ","); + Assert.assertArrayEquals(new int[]{1, 2, 3, 4, 5}, intArray); + } + + @Test + public void formatTest() { + final String template = "你好,我是{name},我的电话是:{phone}"; + final String result = StrUtil.format(template, Dict.of().set("name", "张三").set("phone", "13888881111")); + Assert.assertEquals("你好,我是张三,我的电话是:13888881111", result); + + final String result2 = StrUtil.format(template, Dict.of().set("name", "张三").set("phone", null)); + Assert.assertEquals("你好,我是张三,我的电话是:{phone}", result2); + } + + @Test + public void stripTest() { + String str = "abcd123"; + String strip = StrUtil.strip(str, "ab", "23"); + Assert.assertEquals("cd1", strip); + + str = "abcd123"; + strip = StrUtil.strip(str, "ab", ""); + Assert.assertEquals("cd123", strip); + + str = "abcd123"; + strip = StrUtil.strip(str, null, ""); + Assert.assertEquals("abcd123", strip); + + str = "abcd123"; + strip = StrUtil.strip(str, null, "567"); + Assert.assertEquals("abcd123", strip); + + Assert.assertEquals("", StrUtil.strip("a", "a")); + Assert.assertEquals("", StrUtil.strip("a", "a", "b")); + } + + @Test + public void stripIgnoreCaseTest() { + String str = "abcd123"; + String strip = StrUtil.stripIgnoreCase(str, "Ab", "23"); + Assert.assertEquals("cd1", strip); + + str = "abcd123"; + strip = StrUtil.stripIgnoreCase(str, "AB", ""); + Assert.assertEquals("cd123", strip); + + str = "abcd123"; + strip = StrUtil.stripIgnoreCase(str, "ab", ""); + Assert.assertEquals("cd123", strip); + + str = "abcd123"; + strip = StrUtil.stripIgnoreCase(str, null, ""); + Assert.assertEquals("abcd123", strip); + + str = "abcd123"; + strip = StrUtil.stripIgnoreCase(str, null, "567"); + Assert.assertEquals("abcd123", strip); + } + + @Test + public void indexOfIgnoreCaseTest() { + Assert.assertEquals(-1, StrUtil.indexOfIgnoreCase(null, "balabala", 0)); + Assert.assertEquals(-1, StrUtil.indexOfIgnoreCase("balabala", null, 0)); + Assert.assertEquals(0, StrUtil.indexOfIgnoreCase("", "", 0)); + Assert.assertEquals(0, StrUtil.indexOfIgnoreCase("aabaabaa", "A", 0)); + Assert.assertEquals(2, StrUtil.indexOfIgnoreCase("aabaabaa", "B", 0)); + Assert.assertEquals(1, StrUtil.indexOfIgnoreCase("aabaabaa", "AB", 0)); + Assert.assertEquals(5, StrUtil.indexOfIgnoreCase("aabaabaa", "B", 3)); + Assert.assertEquals(-1, StrUtil.indexOfIgnoreCase("aabaabaa", "B", 9)); + Assert.assertEquals(2, StrUtil.indexOfIgnoreCase("aabaabaa", "B", -1)); + Assert.assertEquals(-1, StrUtil.indexOfIgnoreCase("aabaabaa", "", 2)); + Assert.assertEquals(-1, StrUtil.indexOfIgnoreCase("abc", "", 9)); + } + + @Test + public void lastIndexOfTest() { + final String a = "aabbccddcc"; + final int lastIndexOf = StrUtil.lastIndexOf(a, "c", 0, false); + Assert.assertEquals(-1, lastIndexOf); + } + + @Test + public void lastIndexOfIgnoreCaseTest() { + Assert.assertEquals(-1, StrUtil.lastIndexOfIgnoreCase(null, "balabala", 0)); + Assert.assertEquals(-1, StrUtil.lastIndexOfIgnoreCase("balabala", null)); + Assert.assertEquals(0, StrUtil.lastIndexOfIgnoreCase("", "")); + Assert.assertEquals(7, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "A")); + Assert.assertEquals(5, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "B")); + Assert.assertEquals(4, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "AB")); + Assert.assertEquals(2, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "B", 3)); + Assert.assertEquals(5, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "B", 9)); + Assert.assertEquals(-1, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "B", -1)); + Assert.assertEquals(-1, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "", 2)); + Assert.assertEquals(-1, StrUtil.lastIndexOfIgnoreCase("abc", "", 9)); + Assert.assertEquals(0, StrUtil.lastIndexOfIgnoreCase("AAAcsd", "aaa")); + } + + @Test + public void replaceTest() { + String string = StrUtil.replace("aabbccdd", 2, 6, '*'); + Assert.assertEquals("aa****dd", string); + string = StrUtil.replace("aabbccdd", 2, 12, '*'); + Assert.assertEquals("aa******", string); + } + + @Test + public void replaceTest2() { + final String result = StrUtil.replace("123", "2", "3"); + Assert.assertEquals("133", result); + } + + @Test + public void replaceTest3() { + final String result = StrUtil.replace(",abcdef,", ",", "|"); + Assert.assertEquals("|abcdef|", result); + } + + @Test + public void replaceTest4() { + final String a = "1039"; + final String result = StrUtil.padPre(a, 8, "0"); //在字符串1039前补4个0 + Assert.assertEquals("00001039", result); + + final String aa = "1039"; + final String result1 = StrUtil.padPre(aa, -1, "0"); //在字符串1039前补4个0 + Assert.assertEquals("103", result1); + } + + @Test + public void replaceTest5() { + final String a = "\uD853\uDC09秀秀"; + final String result = StrUtil.replace(a, 1, a.length(), '*'); + Assert.assertEquals("\uD853\uDC09**", result); + + final String aa = "规划大师"; + final String result1 = StrUtil.replace(aa, 2, a.length(), '*'); + Assert.assertEquals("规划**", result1); + } + + @Test + public void upperFirstTest() { + final StringBuilder sb = new StringBuilder("KEY"); + final String s = StrUtil.upperFirst(sb); + Assert.assertEquals(s, sb.toString()); + } + + @Test + public void lowerFirstTest() { + final StringBuilder sb = new StringBuilder("KEY"); + final String s = StrUtil.lowerFirst(sb); + Assert.assertEquals("kEY", s); + } + + @Test + public void subTest() { + final String a = "abcderghigh"; + final String pre = StrUtil.sub(a, -5, a.length()); + Assert.assertEquals("ghigh", pre); + } + + @Test + public void subByCodePointTest() { + // 🤔👍🍓🤔 + final String test = "\uD83E\uDD14\uD83D\uDC4D\uD83C\uDF53\uD83E\uDD14"; + + // 不正确的子字符串 + final String wrongAnswer = StrUtil.sub(test, 0, 3); + Assert.assertNotEquals("\uD83E\uDD14\uD83D\uDC4D\uD83C\uDF53", wrongAnswer); + + // 正确的子字符串 + final String rightAnswer = StrUtil.subByCodePoint(test, 0, 3); + Assert.assertEquals("\uD83E\uDD14\uD83D\uDC4D\uD83C\uDF53", rightAnswer); + } + + @Test + public void subBeforeTest() { + final String a = "abcderghigh"; + String pre = StrUtil.subBefore(a, "d", false); + Assert.assertEquals("abc", pre); + pre = StrUtil.subBefore(a, 'd', false); + Assert.assertEquals("abc", pre); + pre = StrUtil.subBefore(a, 'a', false); + Assert.assertEquals("", pre); + + //找不到返回原串 + pre = StrUtil.subBefore(a, 'k', false); + Assert.assertEquals(a, pre); + pre = StrUtil.subBefore(a, 'k', true); + Assert.assertEquals(a, pre); + } + + @Test + public void subAfterTest() { + final String a = "abcderghigh"; + String pre = StrUtil.subAfter(a, "d", false); + Assert.assertEquals("erghigh", pre); + pre = StrUtil.subAfter(a, 'd', false); + Assert.assertEquals("erghigh", pre); + pre = StrUtil.subAfter(a, 'h', true); + Assert.assertEquals("", pre); + + //找不到字符返回空串 + pre = StrUtil.subAfter(a, 'k', false); + Assert.assertEquals("", pre); + pre = StrUtil.subAfter(a, 'k', true); + Assert.assertEquals("", pre); + } + + @Test + public void subSufByLengthTest() { + Assert.assertEquals("cde", StrUtil.subSufByLength("abcde", 3)); + Assert.assertEquals("", StrUtil.subSufByLength("abcde", -1)); + Assert.assertEquals("", StrUtil.subSufByLength("abcde", 0)); + Assert.assertEquals("abcde", StrUtil.subSufByLength("abcde", 5)); + Assert.assertEquals("abcde", StrUtil.subSufByLength("abcde", 10)); + } + + @Test + public void repeatAndJoinTest() { + String repeatAndJoin = StrUtil.repeatAndJoin("?", 5, ","); + Assert.assertEquals("?,?,?,?,?", repeatAndJoin); + + repeatAndJoin = StrUtil.repeatAndJoin("?", 0, ","); + Assert.assertEquals("", repeatAndJoin); + + repeatAndJoin = StrUtil.repeatAndJoin("?", 5, null); + Assert.assertEquals("?????", repeatAndJoin); + } + + @Test + public void moveTest() { + final String str = "aaaaaaa22222bbbbbbb"; + String result = StrUtil.move(str, 7, 12, -3); + Assert.assertEquals("aaaa22222aaabbbbbbb", result); + result = StrUtil.move(str, 7, 12, -4); + Assert.assertEquals("aaa22222aaaabbbbbbb", result); + result = StrUtil.move(str, 7, 12, -7); + Assert.assertEquals("22222aaaaaaabbbbbbb", result); + result = StrUtil.move(str, 7, 12, -20); + Assert.assertEquals("aaaaaa22222abbbbbbb", result); + + result = StrUtil.move(str, 7, 12, 3); + Assert.assertEquals("aaaaaaabbb22222bbbb", result); + result = StrUtil.move(str, 7, 12, 7); + Assert.assertEquals("aaaaaaabbbbbbb22222", result); + result = StrUtil.move(str, 7, 12, 20); + Assert.assertEquals("aaaaaaab22222bbbbbb", result); + + result = StrUtil.move(str, 7, 12, 0); + Assert.assertEquals("aaaaaaa22222bbbbbbb", result); + } + + @Test + public void removePrefixIgnorecaseTest() { + final String a = "aaabbb"; + String prefix = "aaa"; + Assert.assertEquals("bbb", StrUtil.removePrefixIgnoreCase(a, prefix)); + + prefix = "AAA"; + Assert.assertEquals("bbb", StrUtil.removePrefixIgnoreCase(a, prefix)); + + prefix = "AAABBB"; + Assert.assertEquals("", StrUtil.removePrefixIgnoreCase(a, prefix)); + } + + @Test + public void maxLengthTest() { + final String text = "我是一段正文,很长的正文,需要截取的正文"; + String str = StrUtil.maxLength(text, 5); + Assert.assertEquals("我是一段正...", str); + str = StrUtil.maxLength(text, 21); + Assert.assertEquals(text, str); + str = StrUtil.maxLength(text, 50); + Assert.assertEquals(text, str); + } + + @Test + public void containsAnyTest() { + //字符 + boolean containsAny = StrUtil.containsAny("aaabbbccc", 'a', 'd'); + Assert.assertTrue(containsAny); + containsAny = StrUtil.containsAny("aaabbbccc", 'e', 'd'); + Assert.assertFalse(containsAny); + containsAny = StrUtil.containsAny("aaabbbccc", 'd', 'c'); + Assert.assertTrue(containsAny); + + //字符串 + containsAny = StrUtil.containsAny("aaabbbccc", "a", "d"); + Assert.assertTrue(containsAny); + containsAny = StrUtil.containsAny("aaabbbccc", "e", "d"); + Assert.assertFalse(containsAny); + containsAny = StrUtil.containsAny("aaabbbccc", "d", "c"); + Assert.assertTrue(containsAny); + } + + @Test + public void centerTest() { + Assert.assertNull(StrUtil.center(null, 10)); + Assert.assertEquals(" ", StrUtil.center("", 4)); + Assert.assertEquals("ab", StrUtil.center("ab", -1)); + Assert.assertEquals(" ab ", StrUtil.center("ab", 4)); + Assert.assertEquals("abcd", StrUtil.center("abcd", 2)); + Assert.assertEquals(" a ", StrUtil.center("a", 4)); + } + + @Test + public void padPreTest() { + Assert.assertNull(StrUtil.padPre(null, 10, ' ')); + Assert.assertEquals("001", StrUtil.padPre("1", 3, '0')); + Assert.assertEquals("12", StrUtil.padPre("123", 2, '0')); + + Assert.assertNull(StrUtil.padPre(null, 10, "AA")); + Assert.assertEquals("AB1", StrUtil.padPre("1", 3, "ABC")); + Assert.assertEquals("12", StrUtil.padPre("123", 2, "ABC")); + } + + @Test + public void padAfterTest() { + Assert.assertNull(StrUtil.padAfter(null, 10, ' ')); + Assert.assertEquals("100", StrUtil.padAfter("1", 3, '0')); + Assert.assertEquals("23", StrUtil.padAfter("123", 2, '0')); + Assert.assertEquals("", StrUtil.padAfter("123", -1, '0')); + + Assert.assertNull(StrUtil.padAfter(null, 10, "ABC")); + Assert.assertEquals("1AB", StrUtil.padAfter("1", 3, "ABC")); + Assert.assertEquals("23", StrUtil.padAfter("123", 2, "ABC")); + } + + @Test + 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)); + } + + @Test + public void subBetweenAllTest2() { + //issue#861@Github,起始不匹配的时候,应该直接空 + final String src1 = "/* \n* hutool */ asdas /* \n* hutool */"; + final String src2 = "/ * hutool */ asdas / * hutool */"; + + final String[] results1 = StrUtil.subBetweenAll(src1, "/**", "*/"); + Assert.assertEquals(0, results1.length); + + final String[] results2 = StrUtil.subBetweenAll(src2, "/*", "*/"); + Assert.assertEquals(0, results2.length); + } + + @Test + public void subBetweenAllTest3() { + final String src1 = "'abc'and'123'"; + String[] strings = StrUtil.subBetweenAll(src1, "'", "'"); + Assert.assertEquals(2, strings.length); + Assert.assertEquals("abc", strings[0]); + Assert.assertEquals("123", strings[1]); + + final String src2 = "'abc''123'"; + strings = StrUtil.subBetweenAll(src2, "'", "'"); + Assert.assertEquals(2, strings.length); + Assert.assertEquals("abc", strings[0]); + Assert.assertEquals("123", strings[1]); + + final String src3 = "'abc'123'"; + strings = StrUtil.subBetweenAll(src3, "'", "'"); + Assert.assertEquals(1, strings.length); + Assert.assertEquals("abc", strings[0]); + } + + @Test + public void subBetweenAllTest4() { + final String str = "你好:1388681xxxx用户已开通,1877275xxxx用户已开通,无法发送业务开通短信"; + final String[] strings = StrUtil.subBetweenAll(str, "1877275xxxx", ","); + Assert.assertEquals(1, strings.length); + Assert.assertEquals("用户已开通", strings[0]); + } + + @Test + public void briefTest() { + // case: 1 至 str.length - 1 + final String str = RandomUtil.randomString(RandomUtil.randomInt(1, 100)); + for (int maxLength = 1; maxLength < str.length(); maxLength++) { + final String brief = StrUtil.brief(str, maxLength); + Assert.assertEquals(brief.length(), maxLength); + } + + // case: 不会格式化的值 + Assert.assertEquals(str, StrUtil.brief(str, 0)); + Assert.assertEquals(str, StrUtil.brief(str, -1)); + Assert.assertEquals(str, StrUtil.brief(str, str.length())); + Assert.assertEquals(str, StrUtil.brief(str, str.length() + 1)); + } + + @Test + public void briefTest2() { + final String str = "123"; + int maxLength = 3; + String brief = StrUtil.brief(str, maxLength); + Assert.assertEquals("123", brief); + + maxLength = 2; + brief = StrUtil.brief(str, maxLength); + Assert.assertEquals("1.", brief); + + maxLength = 1; + brief = StrUtil.brief(str, maxLength); + Assert.assertEquals("1", brief); + } + + @Test + public void briefTest3() { + final String str = "123abc"; + + int maxLength = 6; + String brief = StrUtil.brief(str, maxLength); + Assert.assertEquals(str, brief); + + maxLength = 5; + brief = StrUtil.brief(str, maxLength); + Assert.assertEquals("1...c", brief); + + maxLength = 4; + brief = StrUtil.brief(str, maxLength); + Assert.assertEquals("1..c", brief); + + maxLength = 3; + brief = StrUtil.brief(str, maxLength); + Assert.assertEquals("1.c", brief); + + maxLength = 2; + brief = StrUtil.brief(str, maxLength); + Assert.assertEquals("1.", brief); + + maxLength = 1; + brief = StrUtil.brief(str, maxLength); + Assert.assertEquals("1", brief); + } + + @Test + public void filterTest() { + final String filterNumber = StrUtil.filter("hutool678", CharUtil::isNumber); + Assert.assertEquals("678", filterNumber); + final String cleanBlank = StrUtil.filter(" 你 好 ", c -> !CharUtil.isBlankChar(c)); + Assert.assertEquals("你好", cleanBlank); + } + + @Test + public void wrapAllTest() { + String[] strings = StrUtil.wrapAll("`", "`", StrUtil.splitToArray("1,2,3,4", ',')); + Assert.assertEquals("[`1`, `2`, `3`, `4`]", StrUtil.utf8Str(strings)); + + strings = StrUtil.wrapAllWithPair("`", StrUtil.splitToArray("1,2,3,4", ',')); + Assert.assertEquals("[`1`, `2`, `3`, `4`]", StrUtil.utf8Str(strings)); + } + + @Test + public void startWithTest() { + final String a = "123"; + final String b = "123"; + + Assert.assertTrue(StrUtil.startWith(a, b)); + Assert.assertFalse(StrUtil.startWithIgnoreEquals(a, b)); + } + + @Test + public void indexedFormatTest() { + final String ret = StrUtil.indexedFormat("this is {0} for {1}", "a", 1000); + Assert.assertEquals("this is a for 1,000", ret); + } + + @Test + public void hideTest() { + Assert.assertNull(StrUtil.hide(null, 1, 1)); + Assert.assertEquals("", StrUtil.hide("", 1, 1)); + Assert.assertEquals("****duan@163.com", StrUtil.hide("jackduan@163.com", -1, 4)); + Assert.assertEquals("ja*kduan@163.com", StrUtil.hide("jackduan@163.com", 2, 3)); + Assert.assertEquals("jackduan@163.com", StrUtil.hide("jackduan@163.com", 3, 2)); + Assert.assertEquals("jackduan@163.com", StrUtil.hide("jackduan@163.com", 16, 16)); + Assert.assertEquals("jackduan@163.com", StrUtil.hide("jackduan@163.com", 16, 17)); + } + + + @Test + public void isCharEqualsTest() { + final String a = "aaaaaaaaa"; + Assert.assertTrue(StrUtil.isCharEquals(a)); + } + + @Test + public void isNumericTest() { + final String a = "2142342422423423"; + Assert.assertTrue(StrUtil.isNumeric(a)); + } + @Test public void testReplace2() { // https://gitee.com/dromara/hutool/issues/I4M16G diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java index d2b1de7d3..a2b34c992 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java @@ -116,4 +116,11 @@ public class ObjUtilTest { final boolean basicType = ObjUtil.isBasicType(a); Assert.assertTrue(basicType); } + + @Test + public void cloneIfPossibleTest() { + String a = "a"; + final String a2 = ObjUtil.cloneIfPossible(a); + Assert.assertNotSame(a, a2); + } } 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 deleted file mode 100755 index f0b9949a6..000000000 --- a/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java +++ /dev/null @@ -1,615 +0,0 @@ -package cn.hutool.core.util; - -import cn.hutool.core.map.Dict; -import cn.hutool.core.text.StrUtil; -import org.junit.Assert; -import org.junit.Test; - -import java.util.List; - -/** - * 字符串工具类单元测试 - * - * @author Looly - */ -public class StrUtilTest { - - @Test - public void isBlankTest() { - final String blank = "   "; - Assert.assertTrue(StrUtil.isBlank(blank)); - } - - @Test - public void trimTest() { - final String blank = " 哈哈  "; - final String trim = StrUtil.trim(blank); - Assert.assertEquals("哈哈", trim); - } - - @Test - public void trimNewLineTest() { - String str = "\r\naaa"; - Assert.assertEquals("aaa", StrUtil.trim(str)); - str = "\raaa"; - Assert.assertEquals("aaa", StrUtil.trim(str)); - str = "\naaa"; - Assert.assertEquals("aaa", StrUtil.trim(str)); - str = "\r\n\r\naaa"; - Assert.assertEquals("aaa", StrUtil.trim(str)); - } - - @Test - public void trimTabTest() { - final String str = "\taaa"; - Assert.assertEquals("aaa", StrUtil.trim(str)); - } - - @Test - public void cleanBlankTest() { - // 包含:制表符、英文空格、不间断空白符、全角空格 - final String str = " 你 好 "; - final String cleanBlank = StrUtil.cleanBlank(str); - Assert.assertEquals("你好", cleanBlank); - } - - @Test - public void cutTest() { - final String str = "aaabbbcccdddaadfdfsdfsdf0"; - final String[] cut = StrUtil.cut(str, 4); - Assert.assertArrayEquals(new String[]{"aaab", "bbcc", "cddd", "aadf", "dfsd", "fsdf", "0"}, cut); - } - - @Test - public void splitTest() { - final String str = "a,b ,c,d,,e"; - final List split = StrUtil.split(str, ',', -1, true, true); - // 测试空是否被去掉 - Assert.assertEquals(5, split.size()); - // 测试去掉两边空白符是否生效 - Assert.assertEquals("b", split.get(1)); - - final String[] strings = StrUtil.splitToArray("abc/", '/'); - Assert.assertEquals(2, strings.length); - } - - @Test - public void splitEmptyTest() { - final String str = ""; - final List split = StrUtil.split(str, ',', -1, true, true); - // 测试空是否被去掉 - Assert.assertEquals(0, split.size()); - } - - @Test - public void splitTest2() { - final String str = "a.b."; - final List split = StrUtil.split(str, '.'); - Assert.assertEquals(3, split.size()); - Assert.assertEquals("b", split.get(1)); - Assert.assertEquals("", split.get(2)); - } - - @Test - public void splitNullTest() { - Assert.assertEquals(0, StrUtil.split(null, '.').size()); - } - - @Test(expected = IllegalArgumentException.class) - public void splitToArrayNullTest() { - StrUtil.splitToArray(null, '.'); - } - - @Test - public void splitToLongTest() { - final String str = "1,2,3,4, 5"; - long[] longArray = StrUtil.splitToLong(str, ','); - Assert.assertArrayEquals(new long[]{1, 2, 3, 4, 5}, longArray); - - longArray = StrUtil.splitToLong(str, ","); - Assert.assertArrayEquals(new long[]{1, 2, 3, 4, 5}, longArray); - } - - @Test - public void splitToIntTest() { - final String str = "1,2,3,4, 5"; - int[] intArray = StrUtil.splitToInt(str, ','); - Assert.assertArrayEquals(new int[]{1, 2, 3, 4, 5}, intArray); - - intArray = StrUtil.splitToInt(str, ","); - Assert.assertArrayEquals(new int[]{1, 2, 3, 4, 5}, intArray); - } - - @Test - public void formatTest() { - final String template = "你好,我是{name},我的电话是:{phone}"; - final String result = StrUtil.format(template, Dict.of().set("name", "张三").set("phone", "13888881111")); - Assert.assertEquals("你好,我是张三,我的电话是:13888881111", result); - - final String result2 = StrUtil.format(template, Dict.of().set("name", "张三").set("phone", null)); - Assert.assertEquals("你好,我是张三,我的电话是:{phone}", result2); - } - - @Test - public void stripTest() { - String str = "abcd123"; - String strip = StrUtil.strip(str, "ab", "23"); - Assert.assertEquals("cd1", strip); - - str = "abcd123"; - strip = StrUtil.strip(str, "ab", ""); - Assert.assertEquals("cd123", strip); - - str = "abcd123"; - strip = StrUtil.strip(str, null, ""); - Assert.assertEquals("abcd123", strip); - - str = "abcd123"; - strip = StrUtil.strip(str, null, "567"); - Assert.assertEquals("abcd123", strip); - - Assert.assertEquals("", StrUtil.strip("a", "a")); - Assert.assertEquals("", StrUtil.strip("a", "a", "b")); - } - - @Test - public void stripIgnoreCaseTest() { - String str = "abcd123"; - String strip = StrUtil.stripIgnoreCase(str, "Ab", "23"); - Assert.assertEquals("cd1", strip); - - str = "abcd123"; - strip = StrUtil.stripIgnoreCase(str, "AB", ""); - Assert.assertEquals("cd123", strip); - - str = "abcd123"; - strip = StrUtil.stripIgnoreCase(str, "ab", ""); - Assert.assertEquals("cd123", strip); - - str = "abcd123"; - strip = StrUtil.stripIgnoreCase(str, null, ""); - Assert.assertEquals("abcd123", strip); - - str = "abcd123"; - strip = StrUtil.stripIgnoreCase(str, null, "567"); - Assert.assertEquals("abcd123", strip); - } - - @Test - public void indexOfIgnoreCaseTest() { - Assert.assertEquals(-1, StrUtil.indexOfIgnoreCase(null, "balabala", 0)); - Assert.assertEquals(-1, StrUtil.indexOfIgnoreCase("balabala", null, 0)); - Assert.assertEquals(0, StrUtil.indexOfIgnoreCase("", "", 0)); - Assert.assertEquals(0, StrUtil.indexOfIgnoreCase("aabaabaa", "A", 0)); - Assert.assertEquals(2, StrUtil.indexOfIgnoreCase("aabaabaa", "B", 0)); - Assert.assertEquals(1, StrUtil.indexOfIgnoreCase("aabaabaa", "AB", 0)); - Assert.assertEquals(5, StrUtil.indexOfIgnoreCase("aabaabaa", "B", 3)); - Assert.assertEquals(-1, StrUtil.indexOfIgnoreCase("aabaabaa", "B", 9)); - Assert.assertEquals(2, StrUtil.indexOfIgnoreCase("aabaabaa", "B", -1)); - Assert.assertEquals(-1, StrUtil.indexOfIgnoreCase("aabaabaa", "", 2)); - Assert.assertEquals(-1, StrUtil.indexOfIgnoreCase("abc", "", 9)); - } - - @Test - public void lastIndexOfTest() { - final String a = "aabbccddcc"; - final int lastIndexOf = StrUtil.lastIndexOf(a, "c", 0, false); - Assert.assertEquals(-1, lastIndexOf); - } - - @Test - public void lastIndexOfIgnoreCaseTest() { - Assert.assertEquals(-1, StrUtil.lastIndexOfIgnoreCase(null, "balabala", 0)); - Assert.assertEquals(-1, StrUtil.lastIndexOfIgnoreCase("balabala", null)); - Assert.assertEquals(0, StrUtil.lastIndexOfIgnoreCase("", "")); - Assert.assertEquals(7, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "A")); - Assert.assertEquals(5, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "B")); - Assert.assertEquals(4, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "AB")); - Assert.assertEquals(2, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "B", 3)); - Assert.assertEquals(5, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "B", 9)); - Assert.assertEquals(-1, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "B", -1)); - Assert.assertEquals(-1, StrUtil.lastIndexOfIgnoreCase("aabaabaa", "", 2)); - Assert.assertEquals(-1, StrUtil.lastIndexOfIgnoreCase("abc", "", 9)); - Assert.assertEquals(0, StrUtil.lastIndexOfIgnoreCase("AAAcsd", "aaa")); - } - - @Test - public void replaceTest() { - String string = StrUtil.replace("aabbccdd", 2, 6, '*'); - Assert.assertEquals("aa****dd", string); - string = StrUtil.replace("aabbccdd", 2, 12, '*'); - Assert.assertEquals("aa******", string); - } - - @Test - public void replaceTest2() { - final String result = StrUtil.replace("123", "2", "3"); - Assert.assertEquals("133", result); - } - - @Test - public void replaceTest3() { - final String result = StrUtil.replace(",abcdef,", ",", "|"); - Assert.assertEquals("|abcdef|", result); - } - - @Test - public void replaceTest4() { - final String a = "1039"; - final String result = StrUtil.padPre(a, 8, "0"); //在字符串1039前补4个0 - Assert.assertEquals("00001039", result); - - final String aa = "1039"; - final String result1 = StrUtil.padPre(aa, -1, "0"); //在字符串1039前补4个0 - Assert.assertEquals("103", result1); - } - - @Test - public void replaceTest5() { - final String a = "\uD853\uDC09秀秀"; - final String result = StrUtil.replace(a, 1, a.length(), '*'); - Assert.assertEquals("\uD853\uDC09**", result); - - final String aa = "规划大师"; - final String result1 = StrUtil.replace(aa, 2, a.length(), '*'); - Assert.assertEquals("规划**", result1); - } - - @Test - public void upperFirstTest() { - final StringBuilder sb = new StringBuilder("KEY"); - final String s = StrUtil.upperFirst(sb); - Assert.assertEquals(s, sb.toString()); - } - - @Test - public void lowerFirstTest() { - final StringBuilder sb = new StringBuilder("KEY"); - final String s = StrUtil.lowerFirst(sb); - Assert.assertEquals("kEY", s); - } - - @Test - public void subTest() { - final String a = "abcderghigh"; - final String pre = StrUtil.sub(a, -5, a.length()); - Assert.assertEquals("ghigh", pre); - } - - @Test - public void subByCodePointTest() { - // 🤔👍🍓🤔 - final String test = "\uD83E\uDD14\uD83D\uDC4D\uD83C\uDF53\uD83E\uDD14"; - - // 不正确的子字符串 - final String wrongAnswer = StrUtil.sub(test, 0, 3); - Assert.assertNotEquals("\uD83E\uDD14\uD83D\uDC4D\uD83C\uDF53", wrongAnswer); - - // 正确的子字符串 - final String rightAnswer = StrUtil.subByCodePoint(test, 0, 3); - Assert.assertEquals("\uD83E\uDD14\uD83D\uDC4D\uD83C\uDF53", rightAnswer); - } - - @Test - public void subBeforeTest() { - final String a = "abcderghigh"; - String pre = StrUtil.subBefore(a, "d", false); - Assert.assertEquals("abc", pre); - pre = StrUtil.subBefore(a, 'd', false); - Assert.assertEquals("abc", pre); - pre = StrUtil.subBefore(a, 'a', false); - Assert.assertEquals("", pre); - - //找不到返回原串 - pre = StrUtil.subBefore(a, 'k', false); - Assert.assertEquals(a, pre); - pre = StrUtil.subBefore(a, 'k', true); - Assert.assertEquals(a, pre); - } - - @Test - public void subAfterTest() { - final String a = "abcderghigh"; - String pre = StrUtil.subAfter(a, "d", false); - Assert.assertEquals("erghigh", pre); - pre = StrUtil.subAfter(a, 'd', false); - Assert.assertEquals("erghigh", pre); - pre = StrUtil.subAfter(a, 'h', true); - Assert.assertEquals("", pre); - - //找不到字符返回空串 - pre = StrUtil.subAfter(a, 'k', false); - Assert.assertEquals("", pre); - pre = StrUtil.subAfter(a, 'k', true); - Assert.assertEquals("", pre); - } - - @Test - public void subSufByLengthTest() { - Assert.assertEquals("cde", StrUtil.subSufByLength("abcde", 3)); - Assert.assertEquals("", StrUtil.subSufByLength("abcde", -1)); - Assert.assertEquals("", StrUtil.subSufByLength("abcde", 0)); - Assert.assertEquals("abcde", StrUtil.subSufByLength("abcde", 5)); - Assert.assertEquals("abcde", StrUtil.subSufByLength("abcde", 10)); - } - - @Test - public void repeatAndJoinTest() { - String repeatAndJoin = StrUtil.repeatAndJoin("?", 5, ","); - Assert.assertEquals("?,?,?,?,?", repeatAndJoin); - - repeatAndJoin = StrUtil.repeatAndJoin("?", 0, ","); - Assert.assertEquals("", repeatAndJoin); - - repeatAndJoin = StrUtil.repeatAndJoin("?", 5, null); - Assert.assertEquals("?????", repeatAndJoin); - } - - @Test - public void moveTest() { - final String str = "aaaaaaa22222bbbbbbb"; - String result = StrUtil.move(str, 7, 12, -3); - Assert.assertEquals("aaaa22222aaabbbbbbb", result); - result = StrUtil.move(str, 7, 12, -4); - Assert.assertEquals("aaa22222aaaabbbbbbb", result); - result = StrUtil.move(str, 7, 12, -7); - Assert.assertEquals("22222aaaaaaabbbbbbb", result); - result = StrUtil.move(str, 7, 12, -20); - Assert.assertEquals("aaaaaa22222abbbbbbb", result); - - result = StrUtil.move(str, 7, 12, 3); - Assert.assertEquals("aaaaaaabbb22222bbbb", result); - result = StrUtil.move(str, 7, 12, 7); - Assert.assertEquals("aaaaaaabbbbbbb22222", result); - result = StrUtil.move(str, 7, 12, 20); - Assert.assertEquals("aaaaaaab22222bbbbbb", result); - - result = StrUtil.move(str, 7, 12, 0); - Assert.assertEquals("aaaaaaa22222bbbbbbb", result); - } - - @Test - public void removePrefixIgnorecaseTest() { - final String a = "aaabbb"; - String prefix = "aaa"; - Assert.assertEquals("bbb", StrUtil.removePrefixIgnoreCase(a, prefix)); - - prefix = "AAA"; - Assert.assertEquals("bbb", StrUtil.removePrefixIgnoreCase(a, prefix)); - - prefix = "AAABBB"; - Assert.assertEquals("", StrUtil.removePrefixIgnoreCase(a, prefix)); - } - - @Test - public void maxLengthTest() { - final String text = "我是一段正文,很长的正文,需要截取的正文"; - String str = StrUtil.maxLength(text, 5); - Assert.assertEquals("我是一段正...", str); - str = StrUtil.maxLength(text, 21); - Assert.assertEquals(text, str); - str = StrUtil.maxLength(text, 50); - Assert.assertEquals(text, str); - } - - @Test - public void containsAnyTest() { - //字符 - boolean containsAny = StrUtil.containsAny("aaabbbccc", 'a', 'd'); - Assert.assertTrue(containsAny); - containsAny = StrUtil.containsAny("aaabbbccc", 'e', 'd'); - Assert.assertFalse(containsAny); - containsAny = StrUtil.containsAny("aaabbbccc", 'd', 'c'); - Assert.assertTrue(containsAny); - - //字符串 - containsAny = StrUtil.containsAny("aaabbbccc", "a", "d"); - Assert.assertTrue(containsAny); - containsAny = StrUtil.containsAny("aaabbbccc", "e", "d"); - Assert.assertFalse(containsAny); - containsAny = StrUtil.containsAny("aaabbbccc", "d", "c"); - Assert.assertTrue(containsAny); - } - - @Test - public void centerTest() { - Assert.assertNull(StrUtil.center(null, 10)); - Assert.assertEquals(" ", StrUtil.center("", 4)); - Assert.assertEquals("ab", StrUtil.center("ab", -1)); - Assert.assertEquals(" ab ", StrUtil.center("ab", 4)); - Assert.assertEquals("abcd", StrUtil.center("abcd", 2)); - Assert.assertEquals(" a ", StrUtil.center("a", 4)); - } - - @Test - public void padPreTest() { - Assert.assertNull(StrUtil.padPre(null, 10, ' ')); - Assert.assertEquals("001", StrUtil.padPre("1", 3, '0')); - Assert.assertEquals("12", StrUtil.padPre("123", 2, '0')); - - Assert.assertNull(StrUtil.padPre(null, 10, "AA")); - Assert.assertEquals("AB1", StrUtil.padPre("1", 3, "ABC")); - Assert.assertEquals("12", StrUtil.padPre("123", 2, "ABC")); - } - - @Test - public void padAfterTest() { - Assert.assertNull(StrUtil.padAfter(null, 10, ' ')); - Assert.assertEquals("100", StrUtil.padAfter("1", 3, '0')); - Assert.assertEquals("23", StrUtil.padAfter("123", 2, '0')); - Assert.assertEquals("", StrUtil.padAfter("123", -1, '0')); - - Assert.assertNull(StrUtil.padAfter(null, 10, "ABC")); - Assert.assertEquals("1AB", StrUtil.padAfter("1", 3, "ABC")); - Assert.assertEquals("23", StrUtil.padAfter("123", 2, "ABC")); - } - - @Test - 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)); - } - - @Test - public void subBetweenAllTest2() { - //issue#861@Github,起始不匹配的时候,应该直接空 - final String src1 = "/* \n* hutool */ asdas /* \n* hutool */"; - final String src2 = "/ * hutool */ asdas / * hutool */"; - - final String[] results1 = StrUtil.subBetweenAll(src1, "/**", "*/"); - Assert.assertEquals(0, results1.length); - - final String[] results2 = StrUtil.subBetweenAll(src2, "/*", "*/"); - Assert.assertEquals(0, results2.length); - } - - @Test - public void subBetweenAllTest3() { - final String src1 = "'abc'and'123'"; - String[] strings = StrUtil.subBetweenAll(src1, "'", "'"); - Assert.assertEquals(2, strings.length); - Assert.assertEquals("abc", strings[0]); - Assert.assertEquals("123", strings[1]); - - final String src2 = "'abc''123'"; - strings = StrUtil.subBetweenAll(src2, "'", "'"); - Assert.assertEquals(2, strings.length); - Assert.assertEquals("abc", strings[0]); - Assert.assertEquals("123", strings[1]); - - final String src3 = "'abc'123'"; - strings = StrUtil.subBetweenAll(src3, "'", "'"); - Assert.assertEquals(1, strings.length); - Assert.assertEquals("abc", strings[0]); - } - - @Test - public void subBetweenAllTest4() { - final String str = "你好:1388681xxxx用户已开通,1877275xxxx用户已开通,无法发送业务开通短信"; - final String[] strings = StrUtil.subBetweenAll(str, "1877275xxxx", ","); - Assert.assertEquals(1, strings.length); - Assert.assertEquals("用户已开通", strings[0]); - } - - @Test - public void briefTest() { - // case: 1 至 str.length - 1 - final String str = RandomUtil.randomString(RandomUtil.randomInt(1, 100)); - for (int maxLength = 1; maxLength < str.length(); maxLength++) { - final String brief = StrUtil.brief(str, maxLength); - Assert.assertEquals(brief.length(), maxLength); - } - - // case: 不会格式化的值 - Assert.assertEquals(str, StrUtil.brief(str, 0)); - Assert.assertEquals(str, StrUtil.brief(str, -1)); - Assert.assertEquals(str, StrUtil.brief(str, str.length())); - Assert.assertEquals(str, StrUtil.brief(str, str.length() + 1)); - } - - @Test - public void briefTest2() { - final String str = "123"; - int maxLength = 3; - String brief = StrUtil.brief(str, maxLength); - Assert.assertEquals("123", brief); - - maxLength = 2; - brief = StrUtil.brief(str, maxLength); - Assert.assertEquals("1.", brief); - - maxLength = 1; - brief = StrUtil.brief(str, maxLength); - Assert.assertEquals("1", brief); - } - - @Test - public void briefTest3() { - final String str = "123abc"; - - int maxLength = 6; - String brief = StrUtil.brief(str, maxLength); - Assert.assertEquals(str, brief); - - maxLength = 5; - brief = StrUtil.brief(str, maxLength); - Assert.assertEquals("1...c", brief); - - maxLength = 4; - brief = StrUtil.brief(str, maxLength); - Assert.assertEquals("1..c", brief); - - maxLength = 3; - brief = StrUtil.brief(str, maxLength); - Assert.assertEquals("1.c", brief); - - maxLength = 2; - brief = StrUtil.brief(str, maxLength); - Assert.assertEquals("1.", brief); - - maxLength = 1; - brief = StrUtil.brief(str, maxLength); - Assert.assertEquals("1", brief); - } - - @Test - public void filterTest() { - final String filterNumber = StrUtil.filter("hutool678", CharUtil::isNumber); - Assert.assertEquals("678", filterNumber); - final String cleanBlank = StrUtil.filter(" 你 好 ", c -> !CharUtil.isBlankChar(c)); - Assert.assertEquals("你好", cleanBlank); - } - - @Test - public void wrapAllTest() { - String[] strings = StrUtil.wrapAll("`", "`", StrUtil.splitToArray("1,2,3,4", ',')); - Assert.assertEquals("[`1`, `2`, `3`, `4`]", StrUtil.utf8Str(strings)); - - strings = StrUtil.wrapAllWithPair("`", StrUtil.splitToArray("1,2,3,4", ',')); - Assert.assertEquals("[`1`, `2`, `3`, `4`]", StrUtil.utf8Str(strings)); - } - - @Test - public void startWithTest() { - final String a = "123"; - final String b = "123"; - - Assert.assertTrue(StrUtil.startWith(a, b)); - Assert.assertFalse(StrUtil.startWithIgnoreEquals(a, b)); - } - - @Test - public void indexedFormatTest() { - final String ret = StrUtil.indexedFormat("this is {0} for {1}", "a", 1000); - Assert.assertEquals("this is a for 1,000", ret); - } - - @Test - public void hideTest() { - Assert.assertNull(StrUtil.hide(null, 1, 1)); - Assert.assertEquals("", StrUtil.hide("", 1, 1)); - Assert.assertEquals("****duan@163.com", StrUtil.hide("jackduan@163.com", -1, 4)); - Assert.assertEquals("ja*kduan@163.com", StrUtil.hide("jackduan@163.com", 2, 3)); - Assert.assertEquals("jackduan@163.com", StrUtil.hide("jackduan@163.com", 3, 2)); - Assert.assertEquals("jackduan@163.com", StrUtil.hide("jackduan@163.com", 16, 16)); - Assert.assertEquals("jackduan@163.com", StrUtil.hide("jackduan@163.com", 16, 17)); - } - - - @Test - public void isCharEqualsTest() { - final String a = "aaaaaaaaa"; - Assert.assertTrue(StrUtil.isCharEquals(a)); - } - - @Test - public void isNumericTest() { - final String a = "2142342422423423"; - Assert.assertTrue(StrUtil.isNumeric(a)); - } -}