From 1b638079659ed95331de6b69d724335add2865b4 Mon Sep 17 00:00:00 2001 From: micuncang Date: Sat, 25 Dec 2021 23:25:44 +0800 Subject: [PATCH] =?UTF-8?q?replace=E6=96=B9=E6=B3=95=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=8C=85=E5=90=AB=E5=A2=9E=E8=A1=A5=E5=AD=97=E7=AC=A6=EF=BC=88?= =?UTF-8?q?=E4=BE=8B=E5=A6=82=EF=BC=9A=F0=A4=B0=89=EF=BC=89=E7=9A=84?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E3=80=82=E8=84=B1=E6=95=8F=E7=AD=89?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E8=AF=A5=E6=96=B9=E6=B3=95=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=BD=A2=E5=A6=82"=F0=A4=B0=89=E7=A7=80=E7=A7=80"=E7=9A=84?= =?UTF-8?q?=E4=B8=AD=E6=96=87=E6=97=B6=E5=A4=84=E7=90=86=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/text/CharSequenceUtil.java | 16 +++++++++------- .../java/cn/hutool/core/util/StrUtilTest.java | 11 +++++++++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java index 4ef829260..cdf3b3b9a 100644 --- a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java @@ -3583,27 +3583,29 @@ public class CharSequenceUtil { if (isEmpty(str)) { return str(str); } - final int strLength = str.length(); + String originalStr = str(str); + int[] strCodePoints = originalStr.codePoints().toArray(); + final int strLength = strCodePoints.length; if (startInclude > strLength) { - return str(str); + return originalStr; } if (endExclude > strLength) { endExclude = strLength; } if (startInclude > endExclude) { // 如果起始位置大于结束位置,不替换 - return str(str); + return originalStr; } - final char[] chars = new char[strLength]; + final StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < strLength; i++) { if (i >= startInclude && i < endExclude) { - chars[i] = replacedChar; + stringBuilder.append(replacedChar); } else { - chars[i] = str.charAt(i); + stringBuilder.append(new String(strCodePoints, i, 1)); } } - return new String(chars); + return stringBuilder.toString(); } /** 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 index e98ff4dbf..bd5037022 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/StrUtilTest.java @@ -235,6 +235,17 @@ public class StrUtilTest { Assert.assertEquals("103", result1); } + @Test + public void replaceTest5() { + String a = "\uD853\uDC09秀秀"; + String result = StrUtil.replace(a, 1, a.length(), '*'); + Assert.assertEquals("\uD853\uDC09**", result); + + String aa = "规划大师"; + String result1 = StrUtil.replace(aa, 2, a.length(), '*'); + Assert.assertEquals("规划**", result1); + } + @Test public void upperFirstTest() { StringBuilder sb = new StringBuilder("KEY");