From 3b519105bf9964f5989856f5497861758292914a Mon Sep 17 00:00:00 2001 From: ZhouXY108 Date: Wed, 30 Apr 2025 22:57:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor!:=20=E5=88=A0=E9=99=A4=20`RegexTools`?= =?UTF-8?q?=20=E4=B8=AD=E4=BB=A5=20`String[]`=20=E4=BD=9C=E4=B8=BA?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E6=AD=A3=E5=88=99=E8=A1=A8=E8=BE=BE=E5=BC=8F?= =?UTF-8?q?=E5=85=A5=E5=8F=82=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 字符串无法代表一个正则表达式,还需考虑正则表达式的 flag(s),所以当使用多个正则表达式时,更推荐使用 `Pattern[]`。 --- .../plusone/commons/util/RegexTools.java | 111 ------------------ .../plusone/commons/util/RegexToolsTests.java | 25 ---- 2 files changed, 136 deletions(-) diff --git a/src/main/java/xyz/zhouxy/plusone/commons/util/RegexTools.java b/src/main/java/xyz/zhouxy/plusone/commons/util/RegexTools.java index d01dd97..46250dc 100644 --- a/src/main/java/xyz/zhouxy/plusone/commons/util/RegexTools.java +++ b/src/main/java/xyz/zhouxy/plusone/commons/util/RegexTools.java @@ -61,31 +61,6 @@ public final class RegexTools { return getPatternInternal(pattern); } - /** - * 将各个正则表达式转为 {@link Pattern} 实例。 - * - * @param patterns 正则表达式 - * @param cachePattern 是否缓存 {@link Pattern} 实例 - * @return {@link Pattern} 实例数组 - */ - public static Pattern[] getPatterns(final String[] patterns, final boolean cachePattern) { - AssertTools.checkArgument(ArrayTools.isAllElementsNotNull(patterns)); - return cachePattern - ? cacheAndGetPatternsInternal(patterns) - : getPatternsInternal(patterns); - } - - /** - * 将各个正则表达式转为 {@link Pattern} 实例,不缓存。 - * - * @param patterns 正则表达式 - * @return {@link Pattern} 实例数组 - */ - public static Pattern[] getPatterns(final String[] patterns) { - AssertTools.checkArgument(ArrayTools.isAllElementsNotNull(patterns)); - return getPatternsInternal(patterns); - } - /** * 判断 {@code input} 是否匹配 {@code pattern}。 * @@ -151,66 +126,6 @@ public final class RegexTools { return matchesInternal(input, getPatternInternal(pattern)); } - /** - * 判断 {@code input} 是否匹配 {@code patterns} 中的一个。 - * - * @param input 输入 - * @param patterns 正则表达式 - * @param cachePattern 是否缓存 {@link Pattern} 实例 - * @return 判断结果 - */ - public static boolean matchesOne(@Nullable final CharSequence input, final String[] patterns, - final boolean cachePattern) { - AssertTools.checkArgument(ArrayTools.isAllElementsNotNull(patterns)); - final Pattern[] patternSet = cachePattern - ? cacheAndGetPatternsInternal(patterns) - : getPatternsInternal(patterns); - return matchesOneInternal(input, patternSet); - } - - /** - * 判断 {@code input} 是否匹配 {@code patterns} 中的一个。不缓存 {@link Pattern} 实例。 - * - * @param input 输入 - * @param patterns 正则表达式 - * @return 判断结果 - */ - public static boolean matchesOne(@Nullable final CharSequence input, final String[] patterns) { - AssertTools.checkArgument(ArrayTools.isAllElementsNotNull(patterns)); - final Pattern[] patternSet = getPatternsInternal(patterns); - return matchesOneInternal(input, patternSet); - } - - /** - * 判断 {@code input} 是否匹配全部正则。 - * - * @param input 输入 - * @param patterns 正则表达式 - * @param cachePattern 是否缓存 {@link Pattern} 实例 - * @return 判断结果 - */ - public static boolean matchesAll(@Nullable final CharSequence input, final String[] patterns, - final boolean cachePattern) { - AssertTools.checkArgument(ArrayTools.isAllElementsNotNull(patterns)); - final Pattern[] patternSet = cachePattern - ? cacheAndGetPatternsInternal(patterns) - : getPatternsInternal(patterns); - return matchesAllInternal(input, patternSet); - } - - /** - * 判断 {@code input} 是否匹配全部正则。不缓存 {@link Pattern} 实例。 - * - * @param input 输入 - * @param patterns 正则表达式 - * @return 判断结果 - */ - public static boolean matchesAll(@Nullable final CharSequence input, final String[] patterns) { - AssertTools.checkArgument(ArrayTools.isAllElementsNotNull(patterns)); - final Pattern[] patternSet = getPatternsInternal(patterns); - return matchesAllInternal(input, patternSet); - } - /** * 生成 Matcher。 * @@ -289,32 +204,6 @@ public final class RegexTools { return result; } - /** - * 将各个正则表达式转为 {@link Pattern} 实例。 - * - * @param patterns 正则表达式 - * @return {@link Pattern} 实例数组 - */ - @Nonnull - private static Pattern[] cacheAndGetPatternsInternal(final String[] patterns) { - return Arrays.stream(patterns) - .map(RegexTools::cacheAndGetPatternInternal) - .toArray(Pattern[]::new); - } - - /** - * 将各个正则表达式转为 {@link Pattern} 实例。 - * - * @param patterns 正则表达式 - * @return {@link Pattern} 实例数组 - */ - @Nonnull - private static Pattern[] getPatternsInternal(final String[] patterns) { - return Arrays.stream(patterns) - .map(RegexTools::getPatternInternal) - .toArray(Pattern[]::new); - } - /** * 判断 {@code input} 是否匹配 {@code pattern}。 * diff --git a/src/test/java/xyz/zhouxy/plusone/commons/util/RegexToolsTests.java b/src/test/java/xyz/zhouxy/plusone/commons/util/RegexToolsTests.java index 673039b..70fd6c2 100644 --- a/src/test/java/xyz/zhouxy/plusone/commons/util/RegexToolsTests.java +++ b/src/test/java/xyz/zhouxy/plusone/commons/util/RegexToolsTests.java @@ -55,31 +55,6 @@ class RegexToolsTests { }); } - @Test - void getPatterns_CachePatternTrue_ReturnsCachedPatterns() { - String[] patterns = {"abc", "def"}; - Pattern[] cachedPatterns = RegexTools.getPatterns(patterns, true); - Pattern[] patternsFromCache = RegexTools.getPatterns(patterns, true); - assertSame(cachedPatterns[0], patternsFromCache[0]); - assertSame(cachedPatterns[1], patternsFromCache[1]); - } - - @Test - void getPatterns_CachePatternFalse_ReturnsNewPatterns() { - String[] patterns = {"getPatterns_CachePatternFalse_ReturnsNewPatterns1", "getPatterns_CachePatternFalse_ReturnsNewPatterns2"}; - Pattern[] patterns1 = RegexTools.getPatterns(patterns, false); - Pattern[] patterns2 = RegexTools.getPatterns(patterns, false); - assertNotSame(patterns1[0], patterns2[0]); - assertNotSame(patterns1[1], patterns2[1]); - } - - @Test - void getPatterns_NullPatterns_ThrowsException() { - assertThrows(IllegalArgumentException.class, () -> { - RegexTools.getPatterns(null, true); - }); - } - @Test void matches_InputMatchesPattern_ReturnsTrue() { String pattern = "abc";