Java字符串大小写反转问题:为何无法实现单个字符转相反大小写?
字符串大小写反转问题分析与解决
问题描述
需求是将字符串的每个字符转换为相反大小写(例如输入LowerUpperCase,期望输出lOWERuPPERcASE),但以下Java代码运行后,始终得到全小写或全大写的结果,无法实现单个字符的大小写转换:
public class LowerUpperCase { public static void main(String[] args) { String s="lowerUppercase"; for (int i = 0; i < s.length()-1; i++) { if(s.charAt(i) >='a' && s.charAt(i)<='z'){ //OR IF DONE THIS NOT WORKING // if((s.charAt(i) >='a' && s.charAt(i)<='z' ) || (s.charAt(i) >='A' && s.charAt(i)<='Z')){ s=s.toLowerCase();//here should i go for } else if(s.charAt(i) >='A' && s.charAt(i)<='Z'){ s=s.toUpperCase(); } } System.out.println(s); } }
问题原因
- String不可变性:Java里
String是不可变对象,调用s.toLowerCase()或s.toUpperCase()会直接返回一个全新的全小写/全大写字符串,根本不会修改原字符串的单个字符。 - 循环逻辑错误:循环里每次判断单个字符后,都会把整个字符串转成全大/小写,最终只会保留最后一次循环的转换结果,自然做不到逐个字符反转。
解决方案
要逐个处理每个字符,用StringBuilder(可变字符序列)来拼接转换后的字符,既避免频繁创建新String对象,又能实现单个字符的大小写反转:
正确实现代码
public class LowerUpperCase { public static void main(String[] args) { String s = "lowerUppercase"; StringBuilder result = new StringBuilder(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); // 小写字母转大写 if (Character.isLowerCase(c)) { result.append(Character.toUpperCase(c)); } // 大写字母转小写 else if (Character.isUpperCase(c)) { result.append(Character.toLowerCase(c)); } // 非字母字符直接保留 else { result.append(c); } } System.out.println(result.toString()); } }
代码说明
- 用
Character.isLowerCase()和Character.isUpperCase()判断字符大小写,比直接比较ASCII码更严谨,能支持Unicode字符。 - 单个字符转换用
Character.toUpperCase()/Character.toLowerCase(),只处理当前字符,不会影响整个字符串。 StringBuilder高效拼接结果,避免多次创建String对象带来的性能损耗。
内容的提问来源于stack exchange,提问作者raghava
相关产品推荐
相关产品推荐

