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

Java字符串大小写互换代码未达预期,求问题排查思路

你的大小写转换代码逻辑问题分析与修复

嘿,我帮你看看代码里的问题哈~你的核心问题是条件判断的逻辑结构写错了,导致大写字符没被处理,小写字符还会重复添加,咱们一步步拆解:

问题1:大写字符完全没被处理

看你的代码逻辑:

if(Character.isLetter(c)){
    if(Character.isLowerCase(c)){
        // 只处理了小写字符的逻辑
    }
    // 完全没有处理大写字符的分支!
}

当字符是大写时,Character.isLowerCase(c)不成立,直接跳过了所有处理逻辑,大写字符根本不会被转换或添加到结果里。

问题2:嵌套的if逻辑完全错误

在处理小写字符的块里,你先把转成大写的字符加到output,然后又判断原字符是不是大写——这显然不可能,因为你已经进入了isLowerCase(c)的分支,所以这个if永远为false,会执行else把原小写字符也加进去。比如输入a,最终会变成Aa,这完全不符合你想要的“互换”效果。

修复后的代码

咱们调整逻辑结构,同时用StringBuilder提升字符串拼接效率(用+=拼接字符串每次都会生成新对象,性能较差):

public class LowerAndUpperCase {

    public static void main(String[] args) {
        String output = "Elmar DidOkLTWdeee";
        System.out.println(toAlternativeString(output));
    }

    public static String toAlternativeString(String string) {
        StringBuilder output = new StringBuilder();
        for(int i = 0; i < string.length(); i++) {
            char c = string.charAt(i);
            if(Character.isLetter(c)){
                if(Character.isLowerCase(c)){
                    // 小写转大写后添加
                    output.append(Character.toUpperCase(c));
                } else {
                    // 大写转小写后添加
                    output.append(Character.toLowerCase(c));
                }
            } else {
                // 非字母字符直接保留
                output.append(c);
            }
        }
        return output.toString();
    }
}

修复说明

  • 替换String拼接为StringBuilder,避免频繁创建字符串对象,提升性能
  • 调整条件结构:用else分支处理大写字符,确保所有字母都能被覆盖处理
  • 去掉错误的嵌套if,每个分支只做对应的转换操作,不会重复添加字符

现在运行这段代码,输入Elmar DidOkLTWdeee,输出会是eLMAR dIDoKltwDEEE,完全符合你想要的大小写互换效果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:35:26