From 442d4bd854cf2875887a6f3e72a0230e71f9ca46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=81=AByzs?= <835476090@qq.com> Date: Tue, 4 May 2021 15:05:23 +0800 Subject: [PATCH] =?UTF-8?q?CharSequenceUtil=E7=B1=BB=E6=B7=BB=E5=8A=A0star?= =?UTF-8?q?tWith,endWith,remove=E6=96=B9=E6=B3=95=E2=9C=92=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/text/CharSequenceUtil.java | 111 ++++++++++++++++ .../core/text/CharSequenceUtilTest.java | 123 ++++++++++++++++++ 2 files changed, 234 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 d07b3c408..327c4be4e 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 @@ -4,6 +4,7 @@ import cn.hutool.core.comparator.VersionComparator; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Filter; +import cn.hutool.core.lang.PatternPool; import cn.hutool.core.lang.func.Func1; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.CharUtil; @@ -765,6 +766,50 @@ public class CharSequenceUtil { return false; } + /** + * 字符串是否以(数字)开始 + * + * @param str 字符串 + * @return 是否数字开始 + * @since 5.6.5 + */ + public static boolean startWithNumber(CharSequence str) { + return isNotBlank(str) && PatternPool.NUMBERS.matcher(str.subSequence(0, 1)).find(); + } + + /** + * 字符串是否以(英文字母 、数字和下划线)开始 + * + * @param str 字符串 + * @return 是否英文字母 、数字和下划线开始 + * @since 5.6.5 + */ + public static boolean startWithGeneral(CharSequence str) { + return isNotBlank(str) && PatternPool.GENERAL.matcher(str.subSequence(0, 1)).find(); + } + + /** + * 字符串是否以(字母)开始 + * + * @param str 字符串 + * @return 是否字母开始 + * @since 5.6.5 + */ + public static boolean startWithWord(CharSequence str) { + return isNotBlank(str) && PatternPool.WORD.matcher(str.subSequence(0, 1)).find(); + } + + /** + * 字符串是否以(中文汉字)开始 + * + * @param str 字符串 + * @return 是否中文汉字开始 + * @since 5.6.5 + */ + public static boolean startWithChinese(CharSequence str) { + return isNotBlank(str) && PatternPool.CHINESES.matcher(str.subSequence(0, 1)).find(); + } + // ------------------------------------------------------------------------ endWith /** @@ -868,6 +913,50 @@ public class CharSequenceUtil { return false; } + /** + * 字符串是否以(数字)结束 + * + * @param str 字符串 + * @return 是否数字结束 + * @since 5.6.5 + */ + public static boolean endWithNumber(CharSequence str) { + return isNotBlank(str) && PatternPool.NUMBERS.matcher(str.subSequence(str.length() - 1, str.length())).find(); + } + + /** + * 字符串是否以(英文字母 、数字和下划线)结束 + * + * @param str 字符串 + * @return 是否英文字母 、数字和下划线结束 + * @since 5.6.5 + */ + public static boolean endWithGeneral(CharSequence str) { + return isNotBlank(str) && PatternPool.GENERAL.matcher(str.subSequence(str.length() - 1, str.length())).find(); + } + + /** + * 字符串是否以(字母)结束 + * + * @param str 字符串 + * @return 是否字母结束 + * @since 5.6.5 + */ + public static boolean endWithWord(CharSequence str) { + return isNotBlank(str) && PatternPool.WORD.matcher(str.subSequence(str.length() - 1, str.length())).find(); + } + + /** + * 字符串是否以(中文汉字)结束 + * + * @param str 字符串 + * @return 是否中文汉字结束 + * @since 5.6.5 + */ + public static boolean endWithChinese(CharSequence str) { + return isNotBlank(str) && PatternPool.CHINESES.matcher(str.subSequence(str.length() - 1, str.length())).find(); + } + // ------------------------------------------------------------------------ contains /** @@ -1505,6 +1594,28 @@ public class CharSequenceUtil { return str2; } + /** + * 剔除/移除字符串中的所有数字 + * + * @param str 当前字符串 + * @return 移除数字后的字符串 + * @since 5.6.5 + */ + public static String removeNumbers(CharSequence str) { + return ReUtil.delAll(PatternPool.NUMBERS, str); + } + + /** + * 剔除/移除字符串中的所有中文 + * + * @param str 当前字符串 + * @return 移除中文后的字符串 + * @since 5.6.5 + */ + public static String removeChinese(CharSequence str) { + return ReUtil.delAll(PatternPool.CHINESES, str); + } + /** * 清理空白字符 * 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 191e31137..e64bf075b 100644 --- a/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/text/CharSequenceUtilTest.java @@ -24,4 +24,127 @@ public class CharSequenceUtilTest { result = CharSequenceUtil.addSuffixIfNot(str, " is Good"); Assert.assertEquals( str + " is Good", result); } + + @Test + public void startWithNumberTest() throws Exception { + String var1 = "123str"; + String var2 = "180公斤"; + String var3 = "str"; + String var4 = "身高180"; + Assert.assertTrue(CharSequenceUtil.startWithNumber(var1)); + Assert.assertTrue(CharSequenceUtil.startWithNumber(var2)); + Assert.assertFalse(CharSequenceUtil.startWithNumber(var3)); + Assert.assertFalse(CharSequenceUtil.startWithNumber(var4)); + } + + @Test + public void startWithGeneralTest() throws Exception { + String var1 = "str"; + String var2 = "123"; + String var3 = "_str"; + String var4 = "身高180"; + Assert.assertTrue(CharSequenceUtil.startWithGeneral(var1)); + Assert.assertTrue(CharSequenceUtil.startWithGeneral(var2)); + Assert.assertTrue(CharSequenceUtil.startWithGeneral(var3)); + Assert.assertFalse(CharSequenceUtil.startWithGeneral(var4)); + } + + @Test + public void startWithWordTest() throws Exception { + String var1 = "str"; + String var2 = "123"; + String var3 = "_str"; + String var4 = "身高180"; + Assert.assertTrue(CharSequenceUtil.startWithWord(var1)); + Assert.assertFalse(CharSequenceUtil.startWithWord(var2)); + Assert.assertFalse(CharSequenceUtil.startWithWord(var3)); + Assert.assertFalse(CharSequenceUtil.startWithWord(var4)); + } + + @Test + public void startWithChineseTest() throws Exception { + String var1 = "str"; + String var2 = "_str"; + String var3 = "123"; + String var4 = "身高180"; + Assert.assertFalse(CharSequenceUtil.startWithChinese(var1)); + Assert.assertFalse(CharSequenceUtil.startWithChinese(var2)); + Assert.assertFalse(CharSequenceUtil.startWithChinese(var3)); + Assert.assertTrue(CharSequenceUtil.startWithChinese(var4)); + } + + @Test + public void endWithNumberTest() throws Exception { + String var1 = "str123"; + String var2 = "身高180"; + String var3 = "str"; + String var4 = "180公斤"; + Assert.assertTrue(CharSequenceUtil.endWithNumber(var1)); + Assert.assertTrue(CharSequenceUtil.endWithNumber(var2)); + Assert.assertFalse(CharSequenceUtil.endWithNumber(var3)); + Assert.assertFalse(CharSequenceUtil.endWithNumber(var4)); + } + + @Test + public void endWithGeneralTest() throws Exception { + String var1 = "str"; + String var2 = "123"; + String var3 = "str_"; + String var4 = "180公斤"; + Assert.assertTrue(CharSequenceUtil.endWithGeneral(var1)); + Assert.assertTrue(CharSequenceUtil.endWithGeneral(var2)); + Assert.assertTrue(CharSequenceUtil.endWithGeneral(var3)); + Assert.assertFalse(CharSequenceUtil.endWithGeneral(var4)); + } + + @Test + public void endWithWordTest() throws Exception { + String var1 = "str"; + String var2 = "_str"; + String var3 = "123"; + String var4 = "身高180"; + Assert.assertTrue(CharSequenceUtil.endWithWord(var1)); + Assert.assertTrue(CharSequenceUtil.endWithWord(var2)); + Assert.assertFalse(CharSequenceUtil.endWithWord(var3)); + Assert.assertFalse(CharSequenceUtil.endWithWord(var4)); + } + + @Test + public void endWithChineseTest() throws Exception { + String var1 = "str"; + String var2 = "_str"; + String var3 = "123"; + String var4 = "180公斤"; + Assert.assertFalse(CharSequenceUtil.endWithChinese(var1)); + Assert.assertFalse(CharSequenceUtil.endWithChinese(var2)); + Assert.assertFalse(CharSequenceUtil.endWithChinese(var3)); + Assert.assertTrue(CharSequenceUtil.endWithChinese(var4)); + } + + // ------------------------------------------------------------------------ remove + + @Test + public void removeNumbersTest(){ + String var1 = ""; + String var2 = "str"; + String var3 = "身高180"; + String var4 = "身高180体重180"; + Assert.assertEquals("", CharSequenceUtil.removeNumbers(var1)); + Assert.assertEquals("str", CharSequenceUtil.removeNumbers(var2)); + Assert.assertEquals("身高", CharSequenceUtil.removeNumbers(var3)); + Assert.assertEquals("身高体重", CharSequenceUtil.removeNumbers(var4)); + } + + @Test + public void removeChineseTest(){ + String var1 = ""; + String var2 = "str"; + String var3 = "身高180"; + String var4 = "身高180体重180cm"; + Assert.assertEquals("", CharSequenceUtil.removeChinese(var1)); + Assert.assertEquals("str", CharSequenceUtil.removeChinese(var2)); + Assert.assertEquals("180", CharSequenceUtil.removeChinese(var3)); + Assert.assertEquals("180180cm", CharSequenceUtil.removeChinese(var4)); + } + }