From f305ab4fe5accfe4366ae7ab0d0f99b4eb7eca7d Mon Sep 17 00:00:00 2001 From: haihaoge Date: Wed, 25 Dec 2024 22:15:14 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E4=BB=A5=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E5=BC=80=E5=A4=B4=E7=9A=84=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E5=8F=98=E9=87=8FKEY=E8=A7=A3=E6=9E=90=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ql/util/express/ExpressUtil.java | 8 ++++++++ src/main/java/com/ql/util/express/parse/ExpressParse.java | 2 +- src/main/java/com/ql/util/express/parse/WordSplit.java | 8 ++------ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/ql/util/express/ExpressUtil.java b/src/main/java/com/ql/util/express/ExpressUtil.java index c783d34e..bf816c44 100644 --- a/src/main/java/com/ql/util/express/ExpressUtil.java +++ b/src/main/java/com/ql/util/express/ExpressUtil.java @@ -21,6 +21,7 @@ import com.ql.util.express.config.QLExpressRunStrategy; import com.ql.util.express.exception.QLException; import com.ql.util.express.util.QLAliasUtils; +import org.apache.commons.lang.StringUtils; /** * 表达式工具类 @@ -754,4 +755,11 @@ private static boolean hasOnlyOneAbstractMethod(Method[] methods) { } return count == 1; } + + public static boolean isNumber(String tempWord) { + if (StringUtils.isBlank(tempWord)) { + return false; + } + return tempWord.substring(0, tempWord.length() - 1).matches("\\d+"); + } } diff --git a/src/main/java/com/ql/util/express/parse/ExpressParse.java b/src/main/java/com/ql/util/express/parse/ExpressParse.java index 2e1fd486..fa166342 100644 --- a/src/main/java/com/ql/util/express/parse/ExpressParse.java +++ b/src/main/java/com/ql/util/express/parse/ExpressParse.java @@ -127,7 +127,7 @@ public List transferWord2ExpressNode(ExpressPackage rootExpressPack char firstChar = tempWord.charAt(0); char lastChar = tempWord.substring(tempWord.length() - 1).toLowerCase().charAt(0); - if (firstChar >= '0' && firstChar <= '9') { + if (ExpressUtil.isNumber(tempWord)) { if (!result.isEmpty()) { // 对负号进行特殊处理 if ("-".equals(result.get(result.size() - 1).getValue())) { diff --git a/src/main/java/com/ql/util/express/parse/WordSplit.java b/src/main/java/com/ql/util/express/parse/WordSplit.java index 252fb293..35682b74 100644 --- a/src/main/java/com/ql/util/express/parse/WordSplit.java +++ b/src/main/java/com/ql/util/express/parse/WordSplit.java @@ -4,6 +4,7 @@ import java.util.Arrays; import java.util.List; +import com.ql.util.express.ExpressUtil; import com.ql.util.express.exception.QLCompileException; /** @@ -136,12 +137,7 @@ public static void sortSplitWord(String[] splitWord) { } protected static boolean isNumber(String str) { - if (str == null || "".equals(str)) { - return false; - } - char c = str.charAt(0); - // 数字 - return c >= '0' && c <= '9'; + return ExpressUtil.isNumber(str); } public static String getPrintInfo(Object[] list, String splitOp) { From d82a0c8c4c94c4ca67beefd1827984ce70e9d612 Mon Sep 17 00:00:00 2001 From: haihaoge Date: Sun, 29 Dec 2024 18:07:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E8=B0=83=E6=95=B4=E6=95=B0=E5=AD=97?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ql/util/express/ExpressUtil.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/ql/util/express/ExpressUtil.java b/src/main/java/com/ql/util/express/ExpressUtil.java index bf816c44..b011acb1 100644 --- a/src/main/java/com/ql/util/express/ExpressUtil.java +++ b/src/main/java/com/ql/util/express/ExpressUtil.java @@ -760,6 +760,27 @@ public static boolean isNumber(String tempWord) { if (StringUtils.isBlank(tempWord)) { return false; } - return tempWord.substring(0, tempWord.length() - 1).matches("\\d+"); + if (tempWord.length() == 1) { + char c = tempWord.charAt(0); + return c >= '0' && c <= '9'; + } + int lastIndex = tempWord.length() - 1; + boolean hasDecimalPoint = false; + for (int i = 0; i <= lastIndex; i++) { + char c = Character.toLowerCase(tempWord.charAt(i)); + if (c == '.' && !hasDecimalPoint) { + hasDecimalPoint = true; + continue; + } + if (i == lastIndex) { + if (c == 'd' || c == 'f' || c == 'l') { + return true; + } + } + if (!Character.isDigit(c)){ + return false; + } + } + return true; } }