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

Java switch case实现元音替换时计数仅累加1问题求助

问题原因
  • switch分支未加break语句,命中任意一个case后会继续执行后续所有case的逻辑,导致每次匹配到元音时所有元音计数器都会被错误+1。
  • 每次命中元音时调用String.replace()是全局替换所有对应字符,第一次命中后所有该元音都会被替换为数字,后续遍历再也不会命中对应元音的case,因此每个元音的计数器最多只会被加1次。
  • 额外问题:Java中String是不可变类,方法内对myText的赋值仅作用于局部变量,调用方无法拿到替换后的文本。
修复方案

将原字符串转为字符数组逐个处理,仅修改当前遍历到的字符,匹配到元音时同步对对应计数器+1,处理完成后再将字符数组转回字符串返回,既避免全局替换带来的计数错误,也能正确返回处理结果。
修复后代码如下:

public static String replaceAndCount(String myText, int[] vowels) {
    char[] charArray = myText.toCharArray();
    for (int i = 0; i < charArray.length; i++) {
        switch (charArray[i]) {
            case 'a':
                vowels[0]++;
                charArray[i] = '1';
                break;
            case 'e':
                vowels[1]++;
                charArray[i] = '2';
                break;
            case 'i':
                vowels[2]++;
                charArray[i] = '3';
                break;
            case 'o':
                vowels[3]++;
                charArray[i] = '4';
                break;
            case 'u':
                vowels[4]++;
                charArray[i] = '5';
                break;
            default:
                break;
        }
    }
    return new String(charArray);
}

调用示例:

public static void main(String[] args) {
    String input = "apple banana orange";
    int[] count = new int[5];
    String output = replaceAndCount(input, count);
    System.out.println("替换后文本:" + output);
    System.out.println("a替换次数:" + count[0]);
    System.out.println("e替换次数:" + count[1]);
    System.out.println("i替换次数:" + count[2]);
    System.out.println("o替换次数:" + count[3]);
    System.out.println("u替换次数:" + count[4]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:45:02