
在java编程中,我们有时会遇到需要将一个字符串中的每个字符进行大小写反转的需求:小写字母变为大写,大写字母变为小写,而其他非字母字符保持不变。例如,将输入字符串 "loweruppercase" 转换为 "loweruppercase"。
初学者在尝试实现此功能时,常犯的一个错误是直接在循环中使用String类的toLowerCase()或toUpperCase()方法。例如:
public class LowerUpperCase {
public static void main(String[] args) {
String s = "lowerUppercase";
for (int i = 0; i < s.length(); i++) { // 循环遍历字符串
if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') {
s = s.toLowerCase(); // 错误:这会把整个字符串转为小写
} else if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') {
s = s.toUpperCase(); // 错误:这会把整个字符串转为大写
}
}
System.out.println(s);
}
}上述代码的输出总是 "loweruppercase" 或 "LOWERUPPERCASE"。这是因为s.toLowerCase()和s.toUpperCase()方法会返回一个新的字符串,其中所有字符都被转换为指定的大小写。当在循环内部执行 s = s.toLowerCase(); 时,无论当前字符是什么,整个字符串s都会被转换为全小写。同理,s = s.toUpperCase(); 会将整个字符串转换为全大写。这种操作并非针对单个字符,而是针对整个字符串,因此无法实现逐字符的大小写反转。
此外,这里也引出了Java中String的一个重要特性:字符串是不可变的(Immutable)。这意味着一旦一个String对象被创建,它的内容就不能被改变。所有看起来修改String对象的操作(如toLowerCase()、toUpperCase()、replace()等)实际上都会返回一个新的String对象,而原始的String对象保持不变。
要实现字符串中每个字符的大小写反转,我们需要逐个处理字符串中的字符,并构建一个新的字符串来存储结果。由于String的不可变性,反复创建新的String对象(例如在循环中通过s = s + char的方式拼接)会导致大量的临时对象创建和垃圾回收开销,效率低下。因此,推荐使用StringBuilder类来高效地构建可变字符串。
立即学习“Java免费学习笔记(深入)”;
核心思路:
代码示例:
public class CharacterCaseConverter {
public static void main(String[] args) {
String inputString = "lowerUppercase";
String convertedString = convertCase(inputString);
System.out.println("原始字符串: " + inputString);
System.out.println("转换后字符串: " + convertedString); // 预期输出: LOWERuPPERCASE
inputString = "HelloWorld123!";
convertedString = convertCase(inputString);
System.out.println("原始字符串: " + inputString);
System.out.println("转换后字符串: " + convertedString); // 预期输出: hELLOwORLD123!
}
/**
* 将字符串中每个英文字符的大小写进行反转。
* 小写转大写,大写转小写,非英文字符保持不变。
*
* @param s 待处理的字符串
* @return 转换大小写后的新字符串
*/
public static String convertCase(String s) {
if (s == null || s.isEmpty()) {
return s; // 处理空字符串或null的情况
}
StringBuilder output = new StringBuilder(); // 使用StringBuilder高效构建新字符串
for (int i = 0; i < s.length(); i++) {
char currentChar = s.charAt(i); // 获取当前字符
if (currentChar >= 'a' && currentChar <= 'z') {
// 如果是小写字母,转换为大写
output.append(Character.toUpperCase(currentChar));
} else if (currentChar >= 'A' && currentChar <= 'Z') {
// 如果是大写字母,转换为小写
output.append(Character.toLowerCase(currentChar));
} else {
// 非英文字符保持不变
output.append(currentChar);
}
}
return output.toString(); // 将StringBuilder转换为String并返回
}
}代码解释:
// 示例:使用Character.isLowerCase/isUpperCase
if (Character.isLowerCase(currentChar)) {
output.append(Character.toUpperCase(currentChar));
} else if (Character.isUpperCase(currentChar)) {
output.append(Character.toLowerCase(currentChar));
} else {
output.append(currentChar);
}实现Java字符串字符大小写反转的关键在于:
通过理解这些核心概念和实践方法,可以准确高效地完成字符串字符大小写反转的需求。
以上就是Java字符串字符大小写互转:原理与实践的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号