From 09741e3b48938caa0807c7d02ed9cc28b3111288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E6=AC=A7=EF=BC=88=E6=9E=97=E5=B9=B3=E5=87=A1?= =?UTF-8?q?=EF=BC=89?= Date: Fri, 8 Aug 2025 16:56:29 +0800 Subject: [PATCH] 1 --- .../java/cn/van/business/util/JDUtil.java | 59 ++++++++++++------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/src/main/java/cn/van/business/util/JDUtil.java b/src/main/java/cn/van/business/util/JDUtil.java index a48bb65..2be058d 100644 --- a/src/main/java/cn/van/business/util/JDUtil.java +++ b/src/main/java/cn/van/business/util/JDUtil.java @@ -2790,30 +2790,45 @@ public class JDUtil { * @param input 包含价格的字符串 * @return 解析出的价格,失败返回null */ -public static Double parsePrice(String input) { - if (Util.isEmpty(input)) { + public static Double parsePrice(String input) { + logger.info("parsePrice传入input{}", input); + if (input == null || input.isEmpty()) { + return null; + } + + // 使用能够匹配🔥或◉字符的正则表达式 + Pattern pattern = Pattern.compile("(\\uD83D\\uDECD|\\u25C9)[\\s\\S]*?([\\d.]+)\\s*\\uD83D\\uDCB0?"); + Matcher matcher = pattern.matcher(input); + + if (matcher.find()) { + logger.info("parsePrice第一次正则匹配到的价格{}", matcher.group(2)); + try { + String priceStr = matcher.group(2).trim(); + if (priceStr.matches("\\d+\\.?\\d*|\\d*\\.\\d+")) { + return Double.parseDouble(priceStr); + } + } catch (NumberFormatException e) { + return null; + } + } + + // fallback处理 - 使用相同的模式但不依赖💰符号 + Pattern fallbackPattern = Pattern.compile("(\\uD83D\\uDECD|\\u25C9)[\\s\\S]*?([\\d.]+)"); + Matcher fallbackMatcher = fallbackPattern.matcher(input); + if (fallbackMatcher.find()) { + logger.info("parsePrice第二次正则匹配到的价格{}", fallbackMatcher.group(2)); + try { + String priceStr = fallbackMatcher.group(2).trim(); + if (priceStr.matches("\\d+\\.?\\d*|\\d*\\.\\d+")) { + return Double.parseDouble(priceStr); + } + } catch (NumberFormatException e) { + return null; + } + } + return null; } - // 第一次尝试匹配包含“◉”或“🔥”字符的价格 - Pattern pattern = Pattern.compile("(\\uD83D\\uDECD|\\u25C9)[\\s\\S]*?([\\d.]+)\\s*\\uD83D\\uDCB0?"); - Matcher matcher = pattern.matcher(input); - if (matcher.find()) { - logger.info("parsePrice第一次正则匹配到的价格{}", matcher.group(2)); - return Double.parseDouble(matcher.group(2)); - } - - // 如果第一次匹配失败,尝试备用正则表达式 - Pattern fallbackPattern = Pattern.compile("(\\uD83D\\uDECD|\\u25C9)[\\s\\S]*?([\\d.]+)"); - Matcher fallbackMatcher = fallbackPattern.matcher(input); - if (fallbackMatcher.find()) { - logger.info("parsePrice备用正则匹配到的价格{}", fallbackMatcher.group(2)); - return Double.parseDouble(fallbackMatcher.group(2)); - } - - logger.info("parsePrice没有匹配到价格"); - return null; -} - }