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

如何编写Java方法实现仅对单独出现的元音字母加倍?

实现思路
  • 核心规则确认:你需要加倍的「单独出现的元音」指的是连续相同元音的长度为1的情况,如果连续出现2次及以上相同元音则保持原样。如果你的需求是「元音前后没有其他任何元音才算单独」,可以调整对应的判断逻辑即可。
  • 建议使用StringBuilder做字符串拼接,相比直接对String做累加性能提升明显,也不会生成大量无用的中间字符串对象。
  • 你提到的「统计连续相同字符数量」的思路完全可行,单次遍历即可完成:每次从当前下标开始,向后统计所有和当前字符相同的连续字符数量,再根据是否为元音、连续长度是否为1决定拼接逻辑,最后直接跳转下标跳过已处理的字符即可,不需要重复遍历。
修正后的实现代码
public static String doubleVowelsMaybe(String s) {
    // 空字符串直接返回
    if (s == null || s.isEmpty()) {
        return s;
    }
    StringBuilder result = new StringBuilder();
    int index = 0;
    int strLength = s.length();
    while (index < strLength) {
        char currentChar = s.charAt(index);
        int continuousLen = 1;
        // 统计当前字符连续出现的次数
        while (index + continuousLen < strLength && s.charAt(index + continuousLen) == currentChar) {
            continuousLen++;
        }
        // 判断是否为单独出现的元音
        if (isVowel(currentChar) && continuousLen == 1) {
            // 单独元音加倍拼接
            result.append(currentChar).append(currentChar);
        } else {
            // 其他情况原样拼接
            result.append(String.valueOf(currentChar).repeat(continuousLen));
        }
        // 跳过已经处理过的连续字符
        index += continuousLen;
    }
    return result.toString();
}

// 元音判断辅助方法示例,可按需调整大小写匹配逻辑
private static boolean isVowel(char c) {
    return "aeiouAEIOU".indexOf(c) != -1;
}
适配你给出的示例的调整方案

如果你给出的输入beautiful输出beautiifuul是预期效果,说明你的「单独出现」规则是元音的前后字符都不是元音,只需要把上述代码中的逻辑替换为下方版本即可:

public static String doubleVowelsMaybe(String s) {
    if (s == null || s.isEmpty()) {
        return s;
    }
    StringBuilder result = new StringBuilder();
    int strLength = s.length();
    for (int i = 0; i < strLength; i++) {
        char current = s.charAt(i);
        if (isVowel(current)) {
            boolean prevIsVowel = i > 0 && isVowel(s.charAt(i - 1));
            boolean nextIsVowel = i + 1 < strLength && isVowel(s.charAt(i + 1));
            if (!prevIsVowel && !nextIsVowel) {
                // 前后都不是元音,单独出现的元音加倍
                result.append(current).append(current);
                continue;
            }
        }
        // 非单独元音或非元音,原样拼接
        result.append(current);
    }
    return result.toString();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:03