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

如何将多条件if语句转为switch case?输入反向数字仅输出单值求助

代码重构:将多条件if转换为switch并解决顺序处理异常

原问题与代码

原代码使用多条件if语句匹配字符串中的数字字符并转换为对应编码,但存在逻辑错误:输入数字顺序为9到1时,仅能显示一个数值。原代码如下:

if (textLetter.toLowerCase().contains('1')) {
    textCodeElec += ' 19';
    textLetter = textLetter.substring(1); 
}
if (textLetter.toLowerCase().contains('2')) {
    textCodeElec += ' 00';
    textLetter = textLetter.substring(1);
}
if (textLetter.toLowerCase().contains('3')) {
    textCodeElec += ' 70';
    textLetter = textLetter.substring(1);
}
if (textLetter.toLowerCase().contains('4')) {
    textCodeElec += ' 08';
    textLetter = textLetter.substring(1);
}
if (textLetter.toLowerCase().contains('5')) {
    textCodeElec += ' 56';
    textLetter = textLetter.substring(1);
}
if (textLetter.toLowerCase().contains('6')) {
    textCodeElec += ' 68';
    textLetter = textLetter.substring(1);
}
if (textLetter.toLowerCase().contains('7')) {
    textCodeElec += ' 20';
    textLetter = textLetter.substring(1);
}
if (textLetter.toLowerCase().contains('8')) {
    textCodeElec += ' 16';
    textLetter = textLetter.substring(1);
}
if (textLetter.toLowerCase().contains('9')) {
    textCodeElec += ' 27';
    textLetter = textLetter.substring(1);
}

问题根源

原代码的核心错误在于:

  1. 使用contains()判断字符是否存在,但不管字符在字符串中的位置,只要存在就触发处理。
  2. 处理完后调用substring(1)直接截取第一个字符之后的内容,而非移除匹配到的目标字符。例如输入"91"时,第一个if检测到包含'1',就将字符串截为"1",后续检测'9'时字符串中已无'9',导致仅处理了'1'对应的编码。

重构后的Switch Case代码

以下代码通过遍历每个字符逐个处理,用switch替代多条件if,同时修正字符串处理逻辑,确保无论输入顺序如何,所有数字字符都能被正确转换:

基础版本(直接处理所有字符)

// 统一转换为小写,避免重复调用toLowerCase()
String lowerTextLetter = textLetter.toLowerCase();
// 遍历字符串中的每个字符
for (char c : lowerTextLetter.toCharArray()) {
    switch (c) {
        case '1':
            textCodeElec += " 19";
            break;
        case '2':
            textCodeElec += " 00";
            break;
        case '3':
            textCodeElec += " 70";
            break;
        case '4':
            textCodeElec += " 08";
            break;
        case '5':
            textCodeElec += " 56";
            break;
        case '6':
            textCodeElec += " 68";
            break;
        case '7':
            textCodeElec += " 20";
            break;
        case '8':
            textCodeElec += " 16";
            break;
        case '9':
            textCodeElec += " 27";
            break;
        // 可选:处理非数字字符
        default:
            // 不处理或执行其他逻辑
            break;
    }
}
// 若需要清空原字符串(与原代码逻辑对齐)
textLetter = "";

进阶版本(保留未处理字符)

如果需要保留原字符串中未匹配的字符(与原代码处理后保留剩余字符的意图一致),可以使用StringBuilder存储未处理字符:

String lowerTextLetter = textLetter.toLowerCase();
StringBuilder remainingChars = new StringBuilder();

for (char c : lowerTextLetter.toCharArray()) {
    boolean isProcessed = false;
    switch (c) {
        case '1':
            textCodeElec += " 19";
            isProcessed = true;
            break;
        case '2':
            textCodeElec += " 00";
            isProcessed = true;
            break;
        case '3':
            textCodeElec += " 70";
            isProcessed = true;
            break;
        case '4':
            textCodeElec += " 08";
            isProcessed = true;
            break;
        case '5':
            textCodeElec += " 56";
            isProcessed = true;
            break;
        case '6':
            textCodeElec += " 68";
            isProcessed = true;
            break;
        case '7':
            textCodeElec += " 20";
            isProcessed = true;
            break;
        case '8':
            textCodeElec += " 16";
            isProcessed = true;
            break;
        case '9':
            textCodeElec += " 27";
            isProcessed = true;
            break;
        default:
            isProcessed = false;
            break;
    }
    // 未处理的字符保留到剩余字符串中
    if (!isProcessed) {
        remainingChars.append(c);
    }
}
// 更新原字符串为未处理的字符
textLetter = remainingChars.toString();

重构优势

  • 逻辑正确:遍历每个字符逐个处理,无论输入顺序如何,所有目标字符都会被转换。
  • 可读性强:用switch替代冗余的多条件if,代码结构更清晰。
  • 可维护性高:新增或修改字符映射时,只需在switch中添加/修改对应分支即可。

内容的提问来源于stack exchange,提问作者phúc tidi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 03:16:12