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

如何将字符串中每个字符的首次出现转换为大写形式

需求说明

给定任意小写组成的字符串(示例值"aabccdeef"),规则为每个字符的首次出现转换为大写,后续重复出现的字符保留小写,最终输出目标结果"AaBCcDEeF"。

实现思路
  • 用标记位记录遍历过程中已经出现过的字符,避免重复判断
  • 逐字符遍历原字符串,若当前字符未被标记过,转大写后加入结果集,同时标记该字符为已出现
  • 若当前字符已经被标记过,直接保留小写形态加入结果集
  • 选择高效的字符串拼接容器,减少不必要的性能损耗
Java 代码实现
public class StringConvertUtil {
    public static String firstOccurrenceToUpper(String source) {
        // 针对ASCII字符用数组做存在标记,查询效率O(1),轻量无额外装箱开销
        boolean[] hasAppeared = new boolean[128];
        StringBuilder resultBuilder = new StringBuilder(source.length());
        for (char c : source.toCharArray()) {
            char lowerChar = Character.toLowerCase(c);
            if (!hasAppeared[lowerChar]) {
                // 首次出现,转大写追加
                resultBuilder.append(Character.toUpperCase(c));
                hasAppeared[lowerChar] = true;
            } else {
                // 非首次出现,保留小写追加
                resultBuilder.append(lowerChar);
            }
        }
        return resultBuilder.toString();
    }

    public static void main(String[] args) {
        String testInput = "aabccdeef";
        // 执行转换
        String output = firstOccurrenceToUpper(testInput);
        // 输出结果:AaBCcDEeF
        System.out.println(output);
    }
}
逻辑说明
  • 标记数组长度设为128是覆盖所有常用ASCII字符,相比HashSet<Character>不需要做字符的装箱拆箱,性能更优
  • 判断字符是否存在时统一转小写处理,可兼容原字符串混有大写字符的场景,不会出现同字母大小写被判定为不同字符的问题
  • 初始化StringBuilder时提前传入原字符串长度,避免内部数组动态扩容的开销
  • 非首次出现的字符统一转小写追加,保证即使原字符串有大写的重复字符,最终输出也符合规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:01:14