From 0390c8c606962eade078de766bfb647d70fb9d90 Mon Sep 17 00:00:00 2001 From: zzzj Date: Thu, 23 Mar 2023 18:04:44 +0800 Subject: [PATCH] =?UTF-8?q?CharSequenceUtil=E6=96=B0=E5=A2=9EcommonPrefix?= =?UTF-8?q?=E4=B8=8EcommonSuffix=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/text/CharSequenceUtil.java | 54 +++++++++++++++++++ .../core/text/CharSequenceUtilTest.java | 49 +++++++++++++++++ 2 files changed, 103 insertions(+) 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 10549f357..107476613 100755 --- a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java @@ -4586,4 +4586,58 @@ public class CharSequenceUtil { return false; } + /** + * + * @param str1 字符串1 + * @param str2 字符串2 + * @return 字符串1和字符串2的公共前缀 + */ + public static CharSequence commonPrefix(CharSequence str1, CharSequence str2) { + + if (isBlank(str1) || isBlank(str2)) { + return EMPTY; + } + + int minLength = Math.min(str1.length(), str2.length()); + + int index = 0; + + for (; index < minLength; index++) { + + if (str1.charAt(index) != str2.charAt(index)) { + break; + } + + } + + return str1.subSequence(0, index); + } + + /** + * + * @param str1 字符串1 + * @param str2 字符串2 + * @return 字符串1和字符串2的公共后缀 + */ + public static CharSequence commonSuffix(CharSequence str1, CharSequence str2) { + + if (isBlank(str1) || isBlank(str2)) { + return EMPTY; + } + + int str1Index = str1.length() - 1; + + int str2Index = str2.length() - 1; + + for (; str1Index >= 0 && str2Index >= 0; str1Index--, str2Index--) { + + if (str1.charAt(str1Index) != str2.charAt(str2Index)) { + break; + } + + } + + return str1.subSequence(str1Index + 1, str1.length()); + } + } diff --git a/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java index 2672c628b..1962f2ab6 100755 --- a/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java @@ -160,4 +160,53 @@ public class CharSequenceUtilTest { a = null; Assert.assertNull(CharSequenceUtil.trimToNull(a)); } + + @Test + public void commonPrefixTest() throws Exception{ + + // -------------------------- None match ----------------------- + + Assert.assertEquals("", CharSequenceUtil.commonPrefix("", "abc")); + Assert.assertEquals("", CharSequenceUtil.commonPrefix(null, "abc")); + Assert.assertEquals("", CharSequenceUtil.commonPrefix("abc", null)); + Assert.assertEquals("", CharSequenceUtil.commonPrefix("abc", "")); + + Assert.assertEquals("", CharSequenceUtil.commonPrefix("azzzj", "bzzzj")); + + Assert.assertEquals("", CharSequenceUtil.commonPrefix("english中文", "french中文")); + + // -------------------------- Matched ----------------------- + + Assert.assertEquals("name_", CharSequenceUtil.commonPrefix("name_abc", "name_efg")); + + Assert.assertEquals("zzzj", CharSequenceUtil.commonPrefix("zzzja", "zzzjb")); + + Assert.assertEquals("中文", CharSequenceUtil.commonPrefix("中文english", "中文french")); + + } + + @Test + public void commonSuffixTest() throws Exception{ + + // -------------------------- None match ----------------------- + + Assert.assertEquals("", CharSequenceUtil.commonSuffix("", "abc")); + Assert.assertEquals("", CharSequenceUtil.commonSuffix(null, "abc")); + Assert.assertEquals("", CharSequenceUtil.commonSuffix("abc", null)); + Assert.assertEquals("", CharSequenceUtil.commonSuffix("abc", "")); + + Assert.assertEquals("", CharSequenceUtil.commonSuffix("zzzja", "zzzjb")); + + Assert.assertEquals("", CharSequenceUtil.commonSuffix("中文english", "中文Korean")); + + // -------------------------- Matched ----------------------- + + Assert.assertEquals("_name", CharSequenceUtil.commonSuffix("abc_name", "efg_name")); + + Assert.assertEquals("zzzj", CharSequenceUtil.commonSuffix("abczzzj", "efgzzzj")); + + Assert.assertEquals("中文", CharSequenceUtil.commonSuffix("english中文", "Korean中文")); + + } + }