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→ET→t,o→O,M→m,e→EE→e,t→T,y→Y,o→O,U→u
最终输出会是"NiCEtOmEeTYoU",完全符合大小写反转的要求。
内容的提问来源于stack exchange,提问作者HyperMelon
相关产品推荐
相关产品推荐

