From 5d500f8f1499d2a828f18f91f6329021125d1dbb Mon Sep 17 00:00:00 2001 From: Looly Date: Sun, 17 Jul 2022 00:30:39 +0800 Subject: [PATCH] =?UTF-8?q?ReUtil=E5=A2=9E=E5=8A=A0getAllGroups=E9=87=8D?= =?UTF-8?q?=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../java/cn/hutool/core/util/ArrayUtil.java | 9 ++++++--- .../main/java/cn/hutool/core/util/ReUtil.java | 20 ++++++++++++++++++- .../cn/hutool/core/util/ArrayUtilTest.java | 9 +++++++++ 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d120a9c7..7253ee69e 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ * 【core 】 修复Dict#containsKey方法没区分大小写问题(pr#697@Gitee) * 【core 】 增加比较两个LocalDateTime是否为同一天(pr#693@Gitee) * 【core 】 增加TemporalAccessorUtil.isIn、LocalDateTimeUtil.isIn(issue#I5HBL0@Gitee) +* 【core 】 ReUtil增加getAllGroups重载(pr#2455@Github) * ### 🐞Bug修复 * 【core 】 修复CollUtil里面关于可变参数传null造成的crash问题(pr#2428@Github) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java index dbacd2278..a2e69510d 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java @@ -1021,7 +1021,7 @@ public class ArrayUtil extends PrimitiveArrayUtil { * 获取数组中指定多个下标元素值,组成新数组 * * @param 数组元素类型 - * @param array 数组 + * @param array 数组,如果提供为{@code null}则返回{@code null} * @param indexes 下标列表 * @return 结果 */ @@ -1029,10 +1029,13 @@ public class ArrayUtil extends PrimitiveArrayUtil { if (null == array) { return null; } + if(null == indexes){ + return newArray(array.getClass().getComponentType(), 0); + } final T[] result = newArray(array.getClass().getComponentType(), indexes.length); - for (int i : indexes) { - result[i] = get(array, i); + for (int i = 0; i < indexes.length; i++) { + result[i] = ArrayUtil.get(array, indexes[i]); } return result; } diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ReUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ReUtil.java index 9be7aa9f5..9fbe76341 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/ReUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ReUtil.java @@ -206,18 +206,36 @@ public class ReUtil { * @since 4.0.13 */ public static List getAllGroups(Pattern pattern, CharSequence content, boolean withGroup0) { + return getAllGroups(pattern, content, withGroup0, false); + } + + /** + * 获得匹配的字符串匹配到的所有分组 + * + * @param pattern 编译后的正则模式 + * @param content 被匹配的内容 + * @param withGroup0 是否包括分组0,此分组表示全匹配的信息 + * @param findAll 是否查找所有匹配到的内容,{@code false}表示只读取第一个匹配到的内容 + * @return 匹配后得到的字符串数组,按照分组顺序依次列出,未匹配到返回空列表,任何一个参数为null返回null + * @since 4.0.13 + */ + public static List getAllGroups(Pattern pattern, CharSequence content, boolean withGroup0, boolean findAll) { if (null == content || null == pattern) { return null; } ArrayList result = new ArrayList<>(); final Matcher matcher = pattern.matcher(content); - if (matcher.find()) { + while (matcher.find()) { final int startGroup = withGroup0 ? 0 : 1; final int groupCount = matcher.groupCount(); for (int i = startGroup; i <= groupCount; i++) { result.add(matcher.group(i)); } + + if(false == findAll){ + break; + } } return result; } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java index f0dc8a029..ed624dfab 100755 --- a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java @@ -534,4 +534,13 @@ public class ArrayUtilTest { String[] newArr = ArrayUtil.setOrAppend(arr, 0, "Good");// ClassCastException Assert.assertArrayEquals(new String[]{"Good"}, newArr); } + + @Test + public void getAnyTest() { + final String[] a = {"a", "b", "c", "d", "e"}; + final Object o = ArrayUtil.getAny(a, 3, 4); + final String[] resultO = (String[]) o; + final String[] c = {"d", "e"}; + Assert.assertTrue(ArrayUtil.containsAll(c, resultO[0], resultO[1])); + } }