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

使用for循环移除字符串中非单词首字母的元音字母实现问题

代码问题梳理

  • 循环起始索引错误:从i=1开始遍历直接丢弃了整个字符串的第一个字符,也就是第一个单词的首字母,不符合保留单词首字母的规则
  • Character.isWhitespace(i)参数错误:该方法需要传入字符做判断,你传入的是索引值i,判断逻辑完全失效
  • 语法错误:rtn += (char)(msg.charAt(i - 1); 缺少右闭合括号,本身就无法正常编译
  • 取字符逻辑错误:msg.valueOf(i)是将索引数值i转为字符串,不是取当前索引对应的字符,正确写法是String.valueOf(msg.charAt(i))
  • 核心逻辑完全颠倒:需求是仅删除非首字母位置的元音,其余所有字符都要保留,但当前代码仅把元音字符追加到结果,所有辅音字符直接被丢弃
  • 缺失单词首字母标记逻辑:没有判断当前字符是否是单词的首字母位置,无法区分当前位置的元音是否需要保留

修正后实现代码

public static final String VOWELS = "aeiouAEIOU";

public static String stringCompress(String msg){
    if (msg == null || msg.isEmpty()) {
        return "";
    }
    StringBuilder rtn = new StringBuilder();
    // 标记下一个字符是否是单词首字母
    boolean isNewWord = true;
    for (int i = 0; i < msg.length(); i++) {
        char curr = msg.charAt(i);
        if (isNewWord) {
            // 单词首字母直接保留
            rtn.append(curr);
            isNewWord = false;
        } else if (Character.isWhitespace(curr)) {
            // 空白字符直接保留,下一个字符是新单词首字母
            rtn.append(curr);
            isNewWord = true;
        } else {
            // 非首字母非空白,仅保留非元音字符
            if (!VOWELS.contains(String.valueOf(curr))) {
                rtn.append(curr);
            }
        }
    }
    return rtn.toString();
}

以输入bear if为例,运行后输出为ber if,符合规则:bear的首字母b直接保留,第二位e、第三位a都是非首字母位置的元音直接删除,第四位r保留;空格直接保留,if的首字母i是元音也保留,第二位f保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:18:02