From a1d0921ff8e6f1f8c9ad43cdc9c3d30c30ba5b63 Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 27 Dec 2025 11:51:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20`StrMatcher`=E8=BF=9E?= =?UTF-8?q?=E7=BB=AD=E5=8F=98=E9=87=8F=E8=A7=A3=E6=9E=90=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=9A=84=E6=AD=A7=E4=B9=89=E9=97=AE=E9=A2=98=EF=BC=88pr#1419@G?= =?UTF-8?q?itee=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/v7/core/text/placeholder/StrMatcher.java | 10 +++++++++- .../java/cn/hutool/v7/core/text/StrMatcherTest.java | 10 ++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/text/placeholder/StrMatcher.java b/hutool-core/src/main/java/cn/hutool/v7/core/text/placeholder/StrMatcher.java index 11316ecdb1..8f1e7b5cb0 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/text/placeholder/StrMatcher.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/text/placeholder/StrMatcher.java @@ -93,8 +93,9 @@ public class StrMatcher { * * @param pattern 表达式,使用${XXXX}作为变量占位符 * @return 表达式 + * @throws IllegalArgumentException 连续变量不支持,例如:${a}${b} */ - private static List parse(final String pattern) { + private static List parse(final String pattern) throws IllegalArgumentException { final List patterns = new ArrayList<>(); final int length = pattern.length(); char c = 0; @@ -107,6 +108,13 @@ public class StrMatcher { if (inVar) { part.append(c); if ('}' == c) { + if (!patterns.isEmpty()) { + final String lastPart = patterns.get(patterns.size() - 1); + if (StrUtil.isWrap(lastPart, "${", "}")) { + // issue#IDFNF7 连续变量会导致歧义,例如:${a}${b} 不支持 + throw new IllegalArgumentException(StrUtil.format("Consecutive variables '{}{}' are not supported", lastPart, part.toString())); + } + } // 变量结束 inVar = false; patterns.add(part.toString()); diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/text/StrMatcherTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/text/StrMatcherTest.java index 82bd19bc30..e11e3de965 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/text/StrMatcherTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/text/StrMatcherTest.java @@ -22,6 +22,8 @@ import org.junit.jupiter.api.Test; import java.util.Map; +import static org.junit.jupiter.api.Assertions.assertThrows; + public class StrMatcherTest { @Test @@ -54,4 +56,12 @@ public class StrMatcherTest { Assertions.assertEquals("小明", match.get("name")); Assertions.assertEquals("20", match.get("year")); } + + @Test + public void issueIDFNF7Test() { + assertThrows( + IllegalArgumentException.class, + () -> new StrMatcher("${a}${b}") + ); + } }