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

Java大小写反转方法未完全反转所有字符问题求助

问题分析与解决方案

嘿,我一眼就发现你代码里的问题啦!核心问题出在你用了String.replace()方法——这个方法的特性是替换字符串中所有匹配的字符,而不是你当前循环到的那个位置的字符,这就导致某些字母被反复反转,最终没达到预期效果。

为什么原代码会出错?

举个你例子里的场景:
当循环到输入字符串里的小写e(比如索引3的那个),你把它转成大写E,然后调用a.replace('e', 'E'),这会把字符串里所有的小写e都换成大写E;但之后当循环到某个大写E(比如原输入里的索引8),你又会把它转成小写e,调用a.replace('E', 'e'),这又会把所有大写E换回小写e——等于之前反转的e又被改回去了!

同样的,原输入里的t和o也因为这个反复替换的问题,最终没正确反转。

修正后的代码

因为Java的String是不可变的,我们应该用可变的StringBuilder来逐个处理每个索引的字符,这样只会修改当前位置的字符,不会影响其他相同字符:

public static String reverseCase(String str) {
    // 用StringBuilder创建可变的字符序列
    StringBuilder sb = new StringBuilder(str);
    for (int i = 0; i < sb.length(); i++) {
        char currentChar = sb.charAt(i);
        if (Character.isUpperCase(currentChar)) {
            // 当前字符是大写,转成小写后替换当前位置
            sb.setCharAt(i, Character.toLowerCase(currentChar));
        } else {
            // 当前字符是小写,转成大写后替换当前位置
            sb.setCharAt(i, Character.toUpperCase(currentChar));
        }
    }
    return sb.toString();
}

验证你的例子

把输入"nIceToMeEtyoU"代入这个代码,每个字符都会被正确反转一次:

  • n → N,I → i,c → C,e → E
  • T → t,o → O,M → m,e → E
  • E → e,t → T,y → Y,o → O,U → u

最终输出会是"NiCEtOmEeTYoU",完全符合大小写反转的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:08:08