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
相关产品推荐
相关产品推荐

