From 3aaa1f84ce45b085300d653ed910598b2e446964 Mon Sep 17 00:00:00 2001 From: luoweijian <1329394916@qq.com> Date: Thu, 19 Mar 2026 16:15:42 +0800 Subject: [PATCH] bug --- .../impl/SubmitPaperDomainServiceImpl.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/project/exam/domain/service/impl/SubmitPaperDomainServiceImpl.java b/src/main/java/com/project/exam/domain/service/impl/SubmitPaperDomainServiceImpl.java index 785249a..430316e 100644 --- a/src/main/java/com/project/exam/domain/service/impl/SubmitPaperDomainServiceImpl.java +++ b/src/main/java/com/project/exam/domain/service/impl/SubmitPaperDomainServiceImpl.java @@ -126,11 +126,21 @@ public class SubmitPaperDomainServiceImpl implements SubmitPaperDomainService { private String formatAnswer(String ans) { if (StrUtil.isBlank(ans)) return ""; - // 去空格 -> 转大写 -> 排序(解决 B,A vs A,B 的问题) - return Arrays.stream(ans.split(",")) - .map(String::trim) - .map(String::toUpperCase) - .sorted() - .collect(Collectors.joining(",")); + + // 1. 去掉所有干扰字符:逗号、空格、分号、中英文逗号等 + // 使用正则表达式替换掉所有非字母数字的字符 + String cleanAns = ans.replaceAll("[^a-zA-Z0-9]", ""); + + // 2. 将字符串拆分为单个字符数组 + // 例如 "AB" -> ["A", "B"], "A,B" -> ["A", "B"] + String[] chars = cleanAns.split(""); + + // 3. 流式处理:去重(可选) -> 转大写 -> 排序 -> 拼接 + return Arrays.stream(chars) + .filter(StrUtil::isNotBlank) // 过滤掉空字符串 + .map(String::toUpperCase) // 统一转大写 + .distinct() // 如果用户不小心输入了 "A,A,B",去重处理 + .sorted() // 排序,保证 B,A 变 AB + .collect(Collectors.joining("")); // 拼接为 "AB" } }