最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何按照输入的车辆编码数量动态生成自然语言成功提示消息
时间:2026-07-21 09:23:54 编辑:袖梨 来源:一聚教程网
本文介绍如何优化 java 方法,使其在处理单个或多个逗号分隔的车辆编码时,自动生成符合语法习惯的成功提示消息(如单数用“is”,复数用“are”,两个值用“and”,三个及以上用“、and”结构)。
本文介绍如何优化 java 方法,使其在处理单个或多个逗号分隔的车辆编码时,自动生成符合语法习惯的成功提示消息(如单数用“is”,复数用“are”,两个值用“and”,三个及以上用“、and”结构)。
在实际业务系统中,用户常通过单次请求批量提交多个车辆编码(如 "ABC1234,TYZ8765,XYZ999"),而原始代码在循环中反复调用 pr.setSuccessMsg(...),导致仅保留最后一次迭代的结果(即最后一个编码的消息),无法准确反映整体操作状态。为提升用户体验与系统可读性,需将成功消息构建逻辑移出循环,在所有编码处理完毕后统一生成。
以下是重构后的核心逻辑(已整合进原方法):
public PostReturn scan(String carcode, String holdReason) { PostReturn pr = new PostReturn(); if (Utils.nullOrBlank(carcode)) { pr.setErrorMsg("No carcode to lookup"); return pr; } String[] carcodes = carcode.trim().split("s*,s*"); StringBuilder msgBuilder = new StringBuilder(); int count = 0; int total = carcodes.length; for (String carId : carcodes) { Kitcarcode kb = Kitcarcode.parsecarcode(carId); if (kb == null) { pr.setErrorMsg(carId + " was invalid - could not be parsed"); return pr; } CarHandler cph = CarHandler.findByKitcarcode(kb); cph.setAttribute(CarHandler.PREPROCESSING_HOLD_DATE, Utils.getDateAsMDYYYY(new Date())); cph.setAttribute(CarHandler.PREPROCESSING_HOLD_REASON, holdReason); cph.storeChanges(); carProcessing(kb, cph); // 构建编码列表字符串:支持 "A", "A and B", "A, B, and C" 三种格式 if (count > 0) { if (total > 2 && count < total - 1) { msgBuilder.append(", "); } else if (count == total - 1) { msgBuilder.append(" and "); } } msgBuilder.append(kb); count++; } // 拼接主干消息(自动适配单复数) msgBuilder.append(count == 1 ? " is " : " are ") .append("marked as on carprocessing hold for reason: ") .append(holdReason); pr.setSuccessMsg(msgBuilder.toString()); return pr;}
✅ 关键设计说明:
- 使用 StringBuilder 高效拼接编码列表,避免字符串重复创建;
- 通过 count 和 total 动态判断连接符:单个编码无连接符,两个编码用 " and ",三个及以上用逗号分隔 + 最后一个 " and "(即 Oxford comma 风格);
- 单复数动词 "is"/"are" 在循环外一次性确定,语义严谨;
- 错误处理逻辑(如解析失败)保持前置中断,确保原子性与清晰反馈。
⚠️ 注意事项:
- 若 carcodes 数组为空(如输入仅为 , 或空格),split() 可能返回含空字符串的数组,建议在 split 后过滤空值:
List<String> validCodes = Arrays.stream(carcodes) .filter(s -> !Utils.nullOrBlank(s)).toList();
- 生产环境建议对 holdReason 做安全校验(如长度限制、敏感字符过滤),防止 XSS 或日志注入风险;
- 如需国际化支持,应将消息模板提取至资源文件,而非硬编码在代码中。
该方案兼顾可读性、健壮性与扩展性,是批量操作类接口生成自然语言反馈的典型实践。
相关文章
- 试玩体验《梦幻地下城:放置好时光》挂机摸鱼神器 07-28
- 三国天下归心双动召唤阵地队阵容推荐 双动召唤阵地队搭配攻略 07-28
- 遗忘之海宝箱位置推荐 遗忘之海宝箱位置在哪里 07-28
- 核纪元枪械改装五大配件部位效果一览 07-28
- 《梦幻地下城:放置好时光》挂机打书培养满红宠物 07-28
- 以撒的结合控制台打开方法-控制台详细开启步骤 07-28