Java使用StringBuilder替换字符串辅音为@时全字符被替换问题
问题排查与修复
核心错误原因
代码判断条件误用了逻辑运算符:所有||(逻辑或)需替换为&&(逻辑与)。
原判断逻辑为「字符不等于a 或者 不等于e 或者……不等于空格」,该条件对任意字符都恒成立:比如字符是a时,虽满足等于a,但不满足等于e,整个或判断结果仍为真,就会被替换为@,最终所有字符都被替换。
正确逻辑应为:当字符同时不等于所有元音、也不等于空格时,才判定为辅音执行替换。
修正后完整代码
import java.util.Scanner; public class Sample { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder str2= new StringBuilder(sc.nextLine()); for(int i=0;i<str2.length();i++) { char c = str2.charAt(i); if(c!='a' && c!='e' && c!='i' && c!='o' && c!='u' && c!='A' && c!='E' && c!='I' && c!='O' && c!='U' && c!=' ') { str2.setCharAt(i,'@'); } } System.out.println(str2); } }
测试验证
- 测试输入:
aacaaaa - 预期输出:
aa@aaaa - 实际运行输出:
aa@aaaa,符合预期
可选优化方案
可以先将字符转小写再判断,减少一半判断条件:
char c = Character.toLowerCase(str2.charAt(i)); if(c!='a' && c!='e' && c!='i' && c!='o' && c!='u' && c!=' ') { str2.setCharAt(i,'@'); }
内容的提问来源于stack exchange,提问作者krish777
相关产品推荐
相关产品推荐

