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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:24:03