From a6b1bebeac50b1506ab57537d4ac9e79fa3e3559 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 9 Feb 2026 09:14:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D`ReUtil.replaceAll`=E7=A9=BA?= =?UTF-8?q?=E6=8C=87=E9=92=88=E9=97=AE=E9=A2=98=EF=BC=88issue#IDPHVW@Gitee?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../src/main/java/cn/hutool/core/util/ReUtil.java | 12 +++++------- .../test/java/cn/hutool/core/util/ReUtilTest.java | 6 ++++++ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0ca10f45e..f0ca123359 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ * 【core 】 修复`BufferUtil`copy歧义问题(issue#IDN097@Gitee) * 【core 】 修复`JschSessionPool`回收导致的session未关闭问题(issue#4223@Github) * 【core 】 修复`XmlUtil.xmlToBean`option参数无效问题(issue#4226@Github) +* 【core 】 修复`ReUtil.replaceAll`空指针问题(issue#IDPHVW@Gitee) ------------------------------------------------------------------------------------------------------------- # 5.8.43(2026-01-04) 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 4113b21076..2166d13001 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 @@ -4,10 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.comparator.LengthComparator; import cn.hutool.core.convert.Convert; import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.lang.Assert; -import cn.hutool.core.lang.PatternPool; -import cn.hutool.core.lang.RegexPool; -import cn.hutool.core.lang.Validator; +import cn.hutool.core.lang.*; import cn.hutool.core.lang.func.Func1; import cn.hutool.core.lang.mutable.Mutable; import cn.hutool.core.lang.mutable.MutableObj; @@ -216,7 +213,7 @@ public class ReUtil { * @param pattern 编译后的正则模式 * @param content 被匹配的内容 * @param withGroup0 是否包括分组0,此分组表示全匹配的信息 - * @param findAll 是否查找所有匹配到的内容,{@code false}表示只读取第一个匹配到的内容 + * @param findAll 是否查找所有匹配到的内容,{@code false}表示只读取第一个匹配到的内容 * @return 匹配后得到的字符串数组,按照分组顺序依次列出,未匹配到返回空列表,任何一个参数为null返回null * @since 4.0.13 */ @@ -234,7 +231,7 @@ public class ReUtil { result.add(matcher.group(i)); } - if(false == findAll){ + if (false == findAll) { break; } } @@ -885,7 +882,8 @@ public class ReUtil { String replacement = replacementTemplate; for (final String var : varNums) { final int group = Integer.parseInt(var); - replacement = replacement.replace("$" + var, matcher.group(group)); + //replacement = replacement.replace("$" + var, matcher.group(group)); + replacement = StrUtil.replace(replacement, "$" + var, matcher.group(group)); } matcher.appendReplacement(sb, escape(replacement)); result = matcher.find(); diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ReUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ReUtilTest.java index 4100769198..400f59461d 100755 --- a/hutool-core/src/test/java/cn/hutool/core/util/ReUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ReUtilTest.java @@ -244,4 +244,10 @@ public class ReUtilTest { s = ReUtil.get(PatternPool.EMAIL, mail, 0); assertEquals("a.b@Hutool.cn", s); } + + @Test + void issueIDPHVWTest(){ + final String s = ReUtil.replaceAll("2 倾斜摄影成果", "(^\\d+(\\.\\d+)*)(\\s)(((.*?)(DEM|DOM)?)([(|\\(](.*?)[)|\\)])?$)", "$1$3$5($9)"); + assertEquals("2 倾斜摄影成果()", s); + } }