From 1bba40a32f4e9c16fc3bd21ae6643b505e948e16 Mon Sep 17 00:00:00 2001 From: LettuceLeaves <2878506229@qq.com> Date: Wed, 19 Nov 2025 00:20:56 +0800 Subject: [PATCH] =?UTF-8?q?perf:=E4=BC=98=E5=8C=96isSubEquals=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E5=8E=BB=E9=99=A4toString()=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E6=8B=B7=E8=B4=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hutool/v7/core/text/CharSequenceUtil.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/text/CharSequenceUtil.java b/hutool-core/src/main/java/cn/hutool/v7/core/text/CharSequenceUtil.java index e443dd4a0..ecf0fcdfb 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/text/CharSequenceUtil.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/text/CharSequenceUtil.java @@ -2416,8 +2416,35 @@ public class CharSequenceUtil extends StrValidator { if (null == str1 || null == str2) { return false; } + if (str1 instanceof String && str2 instanceof String) { + return ((String) str1).regionMatches(ignoreCase, offset1, (String) str2, offset2, length); + } + if (offset1 < 0 || offset2 < 0 || length < 0) { + return false; + } + if (str1.length() - offset1 < length || str2.length() - offset2 < length) { + return false; + } + for (int i = 0; i < length; i++) { + final char c1 = str1.charAt(offset1 + i); + final char c2 = str2.charAt(offset2 + i); + if (c1 == c2) { + continue; + } + if (ignoreCase) { + final char u1 = Character.toUpperCase(c1); + final char u2 = Character.toUpperCase(c2); + if (u1 == u2) { + continue; + } + if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) { + continue; + } + } + return false; + } - return str1.toString().regionMatches(ignoreCase, offset1, str2.toString(), offset2, length); + return true; } // endregion