From 7db5d0f31febe81301fdab2b61e4ce2409dde5e2 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 17 Apr 2023 10:05:27 +0800 Subject: [PATCH] add method --- .../dromara/hutool/core/text/CharSequenceUtil.java | 12 ++++++++++++ .../hutool/core/text/CharSequenceUtilTest.java | 8 ++++++++ 2 files changed, 20 insertions(+) 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 d4fa4117d..abde65207 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 @@ -3111,6 +3111,18 @@ public class CharSequenceUtil extends StrChecker { return cs == null ? 0 : cs.length(); } + /** + * 获取字符串的Unicode字符长度,如果为{@code null}返回0
+ * Unicode字符长度指实际Unicode字符个数,如emoji算一个字符 + * + * @param cs a 字符串 + * @return 字符串的长度,如果为{@code null}返回0 + * @since 6.0.0 + */ + public static int codeLength(final CharSequence cs) { + return cs == null ? 0 : cs.toString().codePointCount(0, cs.length()); + } + /** * 给定字符串转为bytes后的byte数(byte长度) * 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 eaef633df..ee54a47ea 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 @@ -284,4 +284,12 @@ public class CharSequenceUtilTest { // Expect common suffix: { space * 10 } Assertions.assertEquals(CharSequenceUtil.repeat(CharSequenceUtil.SPACE, 10), CharSequenceUtil.commonSuffix(str1, str2)); } + + @Test + void codeLengthTest() { + String a = "🍒🐽"; + final int i = StrUtil.codeLength(a); + Assertions.assertEquals(4, a.length()); + Assertions.assertEquals(2, i); + } }