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
相关产品推荐
相关产品推荐

