字符串大小写互换指的是将字符串中所有的大写英文字母转换为小写,同时将小写英文字母转换为大写,非英文字符和数字等符号保持不变。这个操作在文本规范化、数据清洗、用户输入处理等场景中都有广泛应用。

核心实现思路
实现字符串大小写互换的核心逻辑是遍历字符串中的每个字符,判断字符的类型:如果是大写字母,就转换为对应的小写字母;如果是小写字母,就转换为对应的大写字母;其他字符直接保留。大部分编程语言都提供了字符大小写判断和转换的内置方法,也可以基于ASCII码值的关系手动实现转换。
基于ASCII码的转换原理
英文字母的ASCII码值有固定规律:大写字母A-Z的ASCII码范围是65-90,小写字母a-z的ASCII码范围是97-122,同一字母的大小写ASCII码值相差32。因此可以通过判断字符的ASCII码值范围,对符合范围的字符加减32实现大小写切换。
不同编程语言的实现示例
Python实现
Python的字符串对象自带swapcase方法,可以直接完成大小写互换,也可以手动遍历实现。
# 使用内置方法实现
s = "Hello World 123"
result1 = s.swapcase()
print(result1) # 输出 hELLO wORLD 123
# 手动遍历实现
def custom_swapcase(s):
res = []
for c in s:
if 'A' <= c <= 'Z':
# 大写转小写,ASCII码加32
res.append(chr(ord(c) + 32))
elif 'a' <= c <= 'z':
# 小写转大写,ASCII码减32
res.append(chr(ord(c) - 32))
else:
res.append(c)
return ''.join(res)
result2 = custom_swapcase("Hello World 123")
print(result2) # 输出 hELLO wORLD 123
JavaScript实现
JavaScript没有内置的大小写互换方法,需要手动遍历字符实现,或者结合正则替换完成。
// 手动遍历实现
function swapCase(str) {
let result = '';
for (let i = 0; i < str.length; i++) {
const c = str[i];
if (c >= 'A' && c <= 'Z') {
// 大写转小写
result += c.toLowerCase();
} else if (c >= 'a' && c <= 'z') {
// 小写转大写
result += c.toUpperCase();
} else {
result += c;
}
}
return result;
}
console.log(swapCase("Hello World 123")); // 输出 hELLO wORLD 123
// 正则替换实现
function swapCaseByReg(str) {
return str.replace(/[a-zA-Z]/g, (match) => {
if (match >= 'A' && match <= 'Z') {
return match.toLowerCase();
} else {
return match.toUpperCase();
}
});
}
console.log(swapCaseByReg("Hello World 123")); // 输出 hELLO wORLD 123
Java实现
Java中可以通过遍历字符串的字符数组,判断字符类型后转换,也可以借助Character类的内置方法简化逻辑。
public class SwapCaseDemo {
public static void main(String[] args) {
String s = "Hello World 123";
// 手动遍历实现
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c >= 'A' && c <= 'Z') {
chars[i] = (char) (c + 32);
} else if (c >= 'a' && c <= 'z') {
chars[i] = (char) (c - 32);
}
}
String result1 = new String(chars);
System.out.println(result1); // 输出 hELLO wORLD 123
// 使用Character类方法实现
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if (Character.isUpperCase(c)) {
sb.append(Character.toLowerCase(c));
} else if (Character.isLowerCase(c)) {
sb.append(Character.toUpperCase(c));
} else {
sb.append(c);
}
}
String result2 = sb.toString();
System.out.println(result2); // 输出 hELLO wORLD 123
}
}
Go语言实现
Go语言可以遍历字符串的rune类型,处理多字节字符的同时完成大小写转换。
package main
import (
"fmt"
"unicode"
)
func swapCase(s string) string {
runes := []rune(s)
for i, r := range runes {
if unicode.IsUpper(r) {
runes[i] = unicode.ToLower(r)
} else if unicode.IsLower(r) {
runes[i] = unicode.ToUpper(r)
}
}
return string(runes)
}
func main() {
s := "Hello World 123"
result := swapCase(s)
fmt.Println(result) // 输出 hELLO wORLD 123
}
注意事项
- 大小写转换仅对英文字母生效,其他字符如数字、中文、标点符号等不会发生变化。
- 部分语言的大小写转换方法可能会受本地化设置影响,处理特殊区域字符时需要注意兼容性。
- 手动实现时需要注意字符编码问题,优先使用语言内置的字符判断和转换方法,避免直接操作ASCII码值导致的多字节字符处理错误。