You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何代码未触发异常?折扣码输入非法字符无报错提示

问题分析与修复方案

你的代码逻辑刚好写反了,这就是为什么永远不会抛出异常的核心原因!

原代码的关键问题

你当前的循环逻辑是:只要遍历到第一个合法字符(字母或$),就直接返回大写后的字符串,完全不会检查后续的字符。比如用户输入"A123",第一个字符A是合法的,代码直接return,根本不会看后面的123;哪怕输入"$$$!",前三个$都是合法的,代码在第一个$就返回了,不会处理最后的!。

修正后的代码

我们需要把逻辑反转:遍历所有字符,只要发现任何一个非法字符(既不是字母也不是$),就抛出异常;只有所有字符都合法时,才返回大写后的字符串。

private String normalizeDiscountCode(String discountCode) {
    // 先处理null的情况,避免调用toUpperCase时触发空指针异常
    if (discountCode == null) {
        throw new IllegalArgumentException("Discount code cannot be null");
    }
    
    String upperDiscountCode = discountCode.toUpperCase();
    for (char c : upperDiscountCode.toCharArray()) {
        // 检查当前字符是否非法:不是字母,也不是$
        if (!Character.isLetter(c) && c != '$') {
            throw new IllegalArgumentException("Discount code contains invalid character: " + c);
        }
    }
    
    // 所有字符都合法,返回大写后的优惠码
    return upperDiscountCode;
}

额外优化提示

  • 在异常信息里带上具体的非法字符,能让用户更清晰地知道哪里出错了
  • 提前处理discountCode为null的情况,避免运行时出现未预期的NullPointerException

内容的提问来源于stack exchange,提问作者Romain Trost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:43:27