From 63c1c7ab93287866a4521fec35dfffd64abd9019 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 30 Jun 2023 10:29:05 +0800 Subject: [PATCH] fix code --- .../hutool/core/text/CharSequenceUtil.java | 12 +++++++++ .../core/text/CharSequenceUtilTest.java | 26 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) 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 ab5d317dd..8431b73d2 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 @@ -3188,6 +3188,18 @@ public class CharSequenceUtil extends StrValidator { return sub(string, 0, length) + "..."; } + /** + * 截断字符串,使用UTF8编码为字节后不超过maxBytes长度 + * + * @param str 原始字符串 + * @param maxBytesLength 最大字节数 + * @param appendDots 截断后是否追加省略号(...) + * @return 限制后的长度 + */ + public static String limitByteLengthUtf8(final String str, final int maxBytesLength, final boolean appendDots) { + return limitByteLength(str, CharsetUtil.UTF_8, maxBytesLength, 4, appendDots); + } + /** * 截断字符串,使用其按照指定编码为字节后不超过maxBytes长度 * 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 ee54a47ea..7588123e9 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 @@ -287,9 +287,33 @@ public class CharSequenceUtilTest { @Test void codeLengthTest() { - String a = "🍒🐽"; + final String a = "🍒🐽"; final int i = StrUtil.codeLength(a); Assertions.assertEquals(4, a.length()); Assertions.assertEquals(2, i); } + + @Test + public void limitByteLengthUtf8Test() { + final String str = "这是This一段中英文"; + String ret = StrUtil.limitByteLengthUtf8(str, 12, true); + Assertions.assertEquals("这是Thi...", ret); + + ret = StrUtil.limitByteLengthUtf8(str, 13, true); + Assertions.assertEquals("这是This...", ret); + + ret = StrUtil.limitByteLengthUtf8(str, 14, true); + Assertions.assertEquals("这是This...", ret); + + ret = StrUtil.limitByteLengthUtf8(str, 999, true); + Assertions.assertEquals(str, ret); + } + + @Test + public void limitByteLengthTest() { + final String str = "This is English"; + final String ret = StrUtil.limitByteLength(str, CharsetUtil.ISO_8859_1,10, 1, false); + Assertions.assertEquals("This is En", ret); + + } }